Ssh
如何取消正在執行的程序並將其關聯到新的螢幕外殼?
我在 SSH shell 上有一個正在執行的程序。我想暫停它並在我回來時能夠取消它的執行。
我想到的一種方法是將其所有權轉移到螢幕外殼,從而使其在其中執行。
有沒有不同的方法可以繼續?
disown
您可以使用內置命令從 shell 撤銷程序的“所有權” :# press Ctrl+Z to suspend the program bg disown
然而,這只告訴 shell
SIGHUP
在 shell 退出時不要向程序發送信號。程序將保留它與終端的任何連接,通常作為標準輸入、輸出和錯誤流。無法將它們重新連接到另一個終端。(螢幕通過模擬每個視窗的終端來工作,因此程序附加到螢幕視窗。)通過在調試器中附加程序(即使用
ptrace
)並使其呼叫和open
,可以將文件描述符重新附加到不同的文件。有一些工具可以做到這一點;這是一個棘手的過程,有時他們會導致該過程崩潰。可能性包括(從How can I disown a running process and associate it to a new screen shell? and Can I nohup/screen an already-started process? 的答案收集的連結? ):dup``close