日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shell在指定目录下执行nohup_nohup:关闭shell程序依然执行

發布時間:2024/9/27 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell在指定目录下执行nohup_nohup:关闭shell程序依然执行 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以前分享過Linux程序的前臺和后臺執行,但是前后臺執行有一個缺陷,即關閉shell窗口(比如logout)后,程序也會被關閉,而且程序的打印會不斷在shell中顯示出來。而nohup命令(no hang up)可以解決在關閉shell后,程序依然執行,就相當于以系統服務的方式執行程序。

一般執行nohup名的方式:

nohup command > outinfo.txt &

命令后面的&,表示一開始就后臺執行,否則就要手動使用Ctrl+z,然后bg N。

> outinfo.txt 試講程序的打印輸出到這個文件,方便查看。

如果是python程序的打印,最好配合使用python的-u命令,禁止打印緩存,這樣才能及時看到程序的打印輸出。比如:

$nohup python3 -u test.py > outinfo.txt &

還有幾個問題:

1, 在程序執行過程中,如果把outinfo.txt刪除,就再也無法看到打印了,如果在自建此文件,程序依然不會寫入,此問題何解?

(1)不太好的方法:定期手動重啟這個程序。

(2)?

2, 重新login之后,jobs命令是無效的,不過因為nohup,程序進程還在,但是如果有多個python程序需要這樣運行,只能通過記住pid的方式,有其它更好的方式嗎?

可以考慮將python程序編譯成可執行文件,nohup執行這個可執行文件,然后即可通過文件名稱來區分不同的程序。但是,編譯成可執行文件后,python -u的效果還有嗎?(pyinstaller沒有安裝成功....還沒測試)

通過ps -ax命令解決,可以查看進程執行的那個py文件。

nohup的原理:

當用戶注銷(logout)或者網絡斷開時,終端會收到 HUP(hangup)信號從而關閉其所有子進程。因此,我們的解決辦法就有兩種途徑:要么讓進程忽略 HUP 信號,要么讓進程運行在新的會話里從而成為不屬于此終端的子進程。

hangup 名稱的來由

在 Unix 的早期版本中,每個終端都會通過 modem 和系統通訊。當用戶 logout 時,modem 就會掛斷(hang up)電話。 同理,當 modem 斷開連接時,就會給系統發送 hangup 信號來通知其關閉所有子進程。

關閉shell讓進程繼續執行,還可以使用

總結

以上是生活随笔為你收集整理的shell在指定目录下执行nohup_nohup:关闭shell程序依然执行的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。