nohup 命令的使用


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 &


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM