nohup 命令的使用

退役小學生發表於2020-08-19

nohup 命令的使用

1. nohup簡介

nohup 命令執行由 Command引數和任何相關的 Arg引數指定的命令,忽略所有結束通話(SIGHUP)訊號。在登出後使用 nohup 命令執行後臺中的程式。要執行後臺中的 nohup 命令,新增 & ( 表示“and”的符號)到命令的尾部。

nohup 是 no hang up 的縮寫,就是不結束通話的意思。

nohup命令:如果你正在執行一個程式,而且你覺得在退出帳戶時該程式還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之後繼續執行相應的程式。

在預設情況下該作業的所有輸出都被重定向到一個名為nohup.out的檔案中。

2. nohup案例介紹

2.1 後臺執行

nohup : 加在一個命令的最前面,表示不結束通話的執行命令

& : 載入一個命令的最後面,表示這個命令放在後臺執行

#使用nohup命令執行這個指令碼
[look@tomcat ~]$ nohup /bin/sh /home/look/thread.sh > /dev/null 2>&1 &
[1] 3831

2.2 檢視後臺執行的命令

有兩個命令可以來檢視,psjobs
區別在於 jobs 只能檢視當前終端後臺執行的任務,換了終端就看不見了。
而ps命令適用於檢視瞬時程式的動態,可以看到別的終端的任務。

2.2.1 jobs

[look@tomcat ~]$ jobs
[1]   執行中               nohup tail -100f Threads_logs/2020-08-19-threads.log &
[2]-  執行中               nohup tail -100f Threads_logs/2020-08-19-threads.log > /dev/null 2>&1 &
[3]+  完成                  nohup /bin/sh /home/look/thread.sh > /dev/null 2>&1

先後起了三個後臺執行的程式,使用jobs後都顯示出來了。“+”代表最近的一個任務(當前任務),“-”代表之前的任務。

只有在當前命令列中使用 nohup和& 時,jobs命令才能將它顯示出來。如果將他們寫到 .sh 指令碼中,然後執行指令碼,是顯示不出來的

2.2.2 ps命令

[look@tomcat ~]$ ps -aux|grep tail
look       3551  0.0  0.0 108092   616 pts/1    S+   14:06   0:00 tail -100f Threads_logs/2020-08-19-threads.log
look       3870  0.0  0.0 108092   616 pts/0    S    14:43   0:00 tail -100f Threads_logs/2020-08-19-threads.log
look       3871  0.0  0.0 108092   612 pts/0    S    14:44   0:00 tail -100f Threads_logs/2020-08-19-threads.log
look       3898  0.0  0.0 112824   980 pts/0    R+   15:01   0:00 grep --color=auto tail

這個是檢視程式常用的命令

a: 顯示所有程式
u: 以使用者為主的格式來顯示
x: 顯示所有程式,不以終端機來區分

2.2.3 關閉當前後臺執行的程式

1)kill 命令

通過jobs命令檢視jobnum,然後執行 kill %jobnum

[look@tomcat ~]$ jobs
[1]-  執行中               nohup tail -100f Threads_logs/2020-08-19-threads.log &
[2]+  執行中               nohup tail -100f Threads_logs/2020-08-19-threads.log > /dev/null 2>&1 &

[look@tomcat ~]$ kill %2

[look@tomcat ~]$ jobs
[1]-  執行中               nohup tail -100f Threads_logs/2020-08-19-threads.log &
[2]+  已終止               nohup tail -100f Threads_logs/2020-08-19-threads.log > /dev/null 2>&1

通過ps命令檢視程式號PID,然後執行 kill %PID

[look@tomcat ~]$ jobs
[1]+  執行中               nohup tail -100f Threads_logs/2020-08-19-threads.log &
[look@tomcat ~]$ kill -9 3870
[look@tomcat ~]$ jobs
[1]+  已殺死               nohup tail -100f Threads_logs/2020-08-19-threads.log

2)如果是前臺程式的話,直接執行 Ctrl+c 就可以終止了

2.2.4 前後臺程式的切換與控制

fg命令:將後臺中的命令調至前臺繼續執行
如果後臺中有多個命令,可以先用jobs檢視jobnun,然後用 fg %jobnum 將選中的命令調出。

[look@tomcat ~]$ jobs
[1]-  執行中               nohup tail -100f Threads_logs/2020-08-19-threads.log &
[2]+  執行中               nohup tail -100f Threads_logs/2020-08-19-threads.log > /dev/null 2>&1 &
[look@tomcat ~]$ fg 2
nohup tail -100f Threads_logs/2020-08-19-threads.log > /dev/null 2>&1

Ctrl + z 命令:將一個正在前臺執行的命令放到後臺,並且處於暫停狀態

[look@tomcat ~]$ fg 2
nohup tail -100f Threads_logs/2020-08-19-threads.log > /dev/null 2>&1
^Z
[2]+  已停止               nohup tail -100f Threads_logs/2020-08-19-threads.log > /dev/null 2>&1

[look@tomcat ~]$ jobs
[1]-  執行中               nohup tail -100f Threads_logs/2020-08-19-threads.log &
[2]+  已停止               nohup tail -100f Threads_logs/2020-08-19-threads.log > /dev/null 2>&1

bg命令:將一個在後臺暫停的命令,變成在後臺繼續執行
如果後臺中有多個命令,可以先用jobs檢視jobnum,然後用 bg %jobnum 將選中的命令調出繼續執行。

[look@tomcat ~]$ bg 2
[2]+ nohup tail -100f Threads_logs/2020-08-19-threads.log > /dev/null 2>&1 &

[look@tomcat ~]$ jobs
[1]-  執行中               nohup tail -100f Threads_logs/2020-08-19-threads.log &
[2]+  執行中               nohup tail -100f Threads_logs/2020-08-19-threads.log > /dev/null 2>&1 &

相關文章