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 檢視後臺執行的命令
有兩個命令可以來檢視,ps
和 jobs
。
區別在於 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 &