linux nohup命令使程式在後台執行的方法

2022-07-09 18:15:14 字數 3056 閱讀 9675

在linux作業系統中從後台一直執行某個程式的方法,就是使用nohup命令了。

unix/linux下一般比如想讓某個程式在後台執行,很多都是使用 & 在程式結尾來讓程式自動執行。

比如要執行mysql在後台:

複製**

**如下:

/usr/local/mysql/bin/mysqld_safe –user=mysql &

但是加入很多程式並不象mysqld一樣做成守護程序,可能程式只是普通程式而已,一般這種程式使用 & 結尾,但是如果終端關閉,那麼程式也會被關閉。

為了能夠後台執行,可以使用nohup這個命令,比如有個test.php需要在後台執行,並且希望在後台能夠定期執行,那麼就使用nohup:

複製**

**如下:

nohup /root/test.php &

原程式的的標準輸出被自動改向到當前目錄下的nohup.out檔案,起到了log的作用。

但是有時候在這一步會有問題,當把終端關閉後,程序會自動被關閉,檢視nohup.out可

以看到在關閉終端瞬間服務自動關閉。

諮詢紅旗linux工程師後,他也不得其解,在我的終端上執行後,他啟動的程序竟然在關閉終端後依然執行。在第二遍給我演示時,我才發現我和他操作終端時的乙個細節不同:他是在當shell中提示了nohup成功後還需要按終端上鍵盤任意鍵退回到shell輸入命令視窗,然後通過在shell中輸入exit來退出終端;而我是每次在nohup執行成功後直接點關閉程式按鈕關閉終端.。所以這時候會斷掉該命令所對應的session,導致nohup對應的程序被通知需要一起shutdown。這個細節有人和我一樣沒注意到,所以在這兒記錄一下了。

nohup 命令

用途:不結束通話地執行命令。

語法:nohup command [ arg … ] [ & ]

nohup 命令執行後台中的程式。要執行後台中的 nohup 命令,新增 & ( 表示」and」的符號)到命令的尾部。

無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 檔案中。如果當前目錄的 nohup.out

檔案不可寫,輸出重定向到 $home/nohup.out 檔案中。如果沒有檔案能建立或開啟以用於追加,那麼 command

引數指定的命令不可呼叫。如果標準錯誤是乙個終端,那麼把指定的命令寫給標準錯誤的所有輸出作為標準輸出重定向到相同的檔案描述符。

退出狀態:該命令返回下列出口值:

126 可以查詢但不能呼叫 command 引數指定的命令。

127 nohup 命令發生錯誤或不能查詢由 command 引數指定的命令。

否則,nohup 命令的退出狀態是 command 引數指定命令的退出狀態。

nohup命令及其輸出檔案

nohup命令:如果你正在執行乙個程序,而且你覺得在退出帳戶時該程序還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之後繼續執行相應的程序。nohup就是不掛起的意思( no hang up)。

該命令的一般形式為:

複製**

**如下:

nohup command &

使用nohup命令提交作業

如果使用nohup命令提交作業,那麼在預設情況下該作業的所有輸出都被重定向到乙個名為nohup.out的檔案中,除非另外指定了輸出檔案:

複製**

**如下:

nohup command > myout.file 2>&1 &

在上面的例子中,輸出被重定向到myout.file檔案中。

使用 jobs 檢視任務。

使用 fg %jobnumber 是將任務拿到前台執行,拿到前台後如果要關閉這個任務按ctrl+c組合鍵即可,但如果要暫停這個任務可以按ctrl+z組合鍵這時就會將任務置於暫停狀態。

[root@wangdm ~ 22:51 #81]# jobs

[2]+  stopped                 dd if=/dev/zero of=/dev/null bs=8k count=100000000

[3]-  stopped                 dd if=/dev/zero of=/dev/null bs=8k count=100000000

如果想要暫停的任務繼續在後執行可以使用 bg %jobnumber這樣暫停後的任務繼續在後台執行狀態會變為running

有人可能注意到了我上面的兩個任務編號2和3的後面分別跟了個'+'和'-',這個'+'代表什麼意思呢?這個'+'就是表示在當前視窗下後台預設呼叫的任務,聽起來有點彆扭下做乙個實驗:

上面我們看到的兩個任務都是處於停止狀態是吧,正常情況下讓任務繼續後台執行是bg

%jobnumber命令吧我現在做如下操作,我直接輸入bg任務2就被啟用了,也就是說在此視窗下後台預設將帶'+'的任務2啟用了,現在是3變成帶'+'了可以重複操作,現在應該理解了吧;fg跟這個是一樣的情況有興趣的朋友可以去試試

[root@wangdm ~ 23:09 #86]# bg

[2]+ dd if=/dev/zero of=/dev/null bs=8k count=100000000 &

[root@wangdm ~ 23:09 #87]# jobs

[2]-  running                 dd if=/dev/zero of=/dev/null bs=8k count=100000000 &

[3]+  stopped                 dd if=/dev/zero of=/dev/null bs=8k count=100000000

[root@wangdm ~ 23:09 #88]# bg

[3]+ dd if=/dev/zero of=/dev/null bs=8k count=100000000 &

[root@wangdm ~ 23:11 #89]# jobs

[2]-  running                 dd if=/dev/zero of=/dev/null bs=8k count=100000000 &

[3]+  running                 dd if=/dev/zero of=/dev/null bs=8k count=100000000 &

Linux nohup命令和後台執行符 的使用

作用 當你在終端執行命令指令碼,當指令碼沒有執行完,如果你關閉終端,那麼跟隨這個終端有關的程序都會退出執行,nohup 命令的作用就是讓使用此命令的指令碼可以脫離終端繼續執行,不受終端退出的影響。命令 nohup bash shell script.sh nohup shell script.sh ...

linux nohup命令詳解

linux nohup命令詳解 nohup命令及其輸出檔案 nohup命令 如果你正在執行乙個程序,而且你覺得在退出帳戶時該程序還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶 關閉終端之後繼續執行相應的程序。nohup就是不掛起的意思 n ohang up 一般都是在linux下no...

Linux nohup命令分析

場景分析 如何不間斷的以後臺程序來執行某個程序呢?給個示例指令碼如下 指令碼tim.sh bin bash while 1 le 2 do echo hello dev null done 這個shell 指令碼會不斷的將 hello 字串的值丟入 dev null中,保證當前的程序不斷的執行。執行...