如何從一個程序切換到另一個程序並殺死第一個程序
我有以下場景,我有兩個程序在後台執行一個在前面執行。後面的程序正在為前面的程序做一些事情。一旦後面的程序完成了必要的配置,它表示它已經完成了對第一個程序的備份支持,現在需要殺死前面的程序,後面的程序將控制第一個程序。
幫助非常重要,我將如何在 Linux 中完成這個場景。任何方向或提示都受到高度讚賞。
很難理解指定的要求,所以首先我將嘗試說明可能需要額外解釋的地方。
您已將這篇文章標記為“遷移”,因此我假設這些程序已經存在並且已知可以在某些非 Linux 架構上執行。程序間通信和信令的概念相當普遍,但說明程序目前執行的架構和作業系統將非常有幫助。
我還看到了“多執行緒”標籤,儘管文本只提到了兩個不同的程序。任何一個程序實際上都是多執行緒的嗎?
我最初認為“前”和“後”與由外殼(也已標記)啟動的前台和後台程序相關。但這並不是程序本身之間的真正關係,只是它們與其啟動機制的關係。
我相信您指的是一個“前端”程序,它提供了一個用於輸入參數的 GUI,一旦將這些傳遞給“後端”程序,它就會自動進行。也可能只需要暫停前端,直到可以再次使用 GUI 來提供回饋或結果。
一個關鍵問題是兩個程序之間的參數通信。我知道的方法包括:共享記憶體;管道流(作為未命名管道、命名管道或套接字);和共享文件。信號只適用於事件,不適用於數據流。必須了解現有機制,以便我們繼續進行。
一個程序不可能“控制”另一個程序。可能存在父子關係(您的前端或後端可能是父級),但這種關係不能顛倒。parent 的作用是預先安排 parent 和 child 之間的通信:或者,parent 可以啟動兩個可以相互通信的 child(兄弟姐妹)。
父母或孩子都可以向對方發出信號,實際上每個信號都可以殺死另一個程序。通過關閉它們之間的通信渠道來結束關係更為常見,這使結束程序具有整潔關閉的能力。
如果您已經擁有這些程序,那麼確切地了解它們目前如何互動將非常有幫助,以便可以推薦最接近的 Linux 功能匹配。當另一種方法可能更合適時,我建議一個需要對現有程式碼進行重大更改的模型沒有任何目的。
幾乎可以肯定的是,Linux 可以為這些程序的合作提供必要的環境。問題是我們仍然對需要模擬的現有機制一無所知,或者實際上您是否可以訪問程序的原始碼,以及它們是用什麼語言編寫的。