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 &