簡體   English   中英

是否可以從終端運行程序並在關閉終端后繼續運行?

[英]Is it possible to run a program from terminal and have it continue to run after you close the terminal?

我寫了一個程序,我通過SSH連接到盒子后運行。 它有一些用戶交互,例如在提示后選擇選項,通常我等待它執行的進程在注銷之前完成關閉終端並結束程序。 但是現在這個過程非常冗長,我不想在登錄時等待,所以我怎么能在C中實現這個解決方法呢?

您可以按照“&”命令在后台運行程序

wget -m www.google.com&

或者,您可以使用“屏幕”程序,它允許您附加 - deattach會話

屏幕wget -m www.google.com

(按CTRL + D)

screen -r(TO RE ATTACH)

http://linux.die.net/man/1/screen

當shell退出時,該過程被發送HUP信號。 您所要做的就是安裝一個忽略SIGHUP的信號處理程序。

或者只使用nohup運行程序。

執行此操作的傳統方法是使用nohup(1)命令:

nohup mycmd < /dev/null >& output.log &

當然,如果您不關心輸出,也可以將其發送到/ dev / null,或者您可以根據需要從文件中獲取輸入。

這樣做可以保護您的進程免受通常導致它退出的SIGHUP的影響。 您還需要像上面一樣重定向stdin / stdout / stderr,因為您將結束您的ssh會話。

上面顯示的語法用於bash。

你可以使用screen命令。 這是一個教程 請注意,您可能需要將其安裝到您的系統中。

有很多選項:-) TIMTOWTDI ...但是,為了您的目的,您可能會考慮運行命令行實用程序,如dtach或GNU screen

如果你真的想在C中實現某些東西,你可以重新發明那個輪子,但是根據你對問題的描述,我懷疑它應該是必要的......

背景一個過程的實際C代碼是微不足道的:

//do interactive stuff...  
if(fork())
     exit(0);
//cool, I've been daemonized.

如果您知道代碼永遠不會出現在非Linux或BSD機器上,您甚至可以使用daemon()

//interactive...
daemon(0, 0);
//background...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM