linux程序后臺(tái)運(yùn)行命令
linux程序后臺(tái)運(yùn)行命令
在關(guān)閉終端后,有時(shí)候我們?nèi)匀恍枰绦蛟诤笈_(tái)繼續(xù)運(yùn)行,那需要怎么做呢?下面由學(xué)習(xí)啦小編為大家整理了linux程序后臺(tái)運(yùn)行命令的相關(guān)知識(shí),希望大家喜歡!
linux程序后臺(tái)運(yùn)行命令詳解
前置知識(shí):xterm,console,tty,pts,pty的區(qū)別
shell是直接和內(nèi)核進(jìn)行通信的東西
xterm是一個(gè)軟件概念,可以通過這個(gè)程序連接到console從而控制主機(jī),可以理解為cli形式的終端模擬器,而gnome-terminal,konsole就是gui形式的終端模擬器
console是主機(jī)的控制臺(tái),是一個(gè)物理概念。
tty、pty、pts都是終端,是硬件或者設(shè)備概念。
tty是所有終端設(shè)備的總稱
pty是其中一類,偽終端,或者叫虛擬終端
linux程序后臺(tái)運(yùn)行命令一、“&” 命令行結(jié)尾法
在Unix/Linux下如果想讓程序獨(dú)立終端運(yùn)行,一般都是使用 & 在命令結(jié)尾來讓程序自動(dòng)運(yùn)行。(命令后可以不追加空格)
打開gnome-terminal,執(zhí)行如下命令:
delectate@delectate:~$ totem &
[1] 8510
delectate@delectate:~$
有幾點(diǎn)需要注意:
已經(jīng)啟動(dòng)的程序依然attach于當(dāng)前pts,只有當(dāng)前終端模擬器關(guān)閉(使用exit命令退出),進(jìn)程自動(dòng)被tty繼承。
delectate@delectate:~$ ps -e | grep totem
//程序已被以totem & 形式啟動(dòng),當(dāng)前附在pts0上
8819 pts/0 00:00:00 totem
delectate@delectate:~$ ps -e | grep totem
//pts0的模擬終端被exit命令關(guān)閉,totem自動(dòng)附在tty
8819 ? 00:00:00 totem
delectate@delectate:~$
具有debug輸出的進(jìn)程,需要按enter鍵進(jìn)行中斷當(dāng)前debug輸出。但是如果程序持續(xù)進(jìn)行printf,你將無法輸入任何命令。
delectate@delectate:~$ vlc &
[1] 8850
delectate@delectate:~$ VLC media player 1.0.6 Goldeneye
[0x8b998b0] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.
//enter pressed
delectate@delectate:~$ //show a clean terminal now
** (:8850): CRITICAL **: giop_thread_request_push: assertion `tdata != NULL' failed
//仍然在輸出數(shù)據(jù)……
//關(guān)閉程序
[1]+ Done vlc
delectate@delectate:~$
你無法記錄程序的debug輸出結(jié)果。
只有當(dāng)虛擬終端是 $ 或者 # 時(shí)候,才可以關(guān)閉此終端,否則可能導(dǎo)致已經(jīng)啟動(dòng)的進(jìn)程被關(guān)閉(按enter——如果程序持續(xù)輸出信息而沒有出現(xiàn) $ 或 #)
linux程序后臺(tái)運(yùn)行命令二、使用nohup命令
nohup描述:Run COMMAND, ignoring hangup signals.(忽略任何中斷/掛起信號(hào),使命令繼續(xù)執(zhí)行)
但是當(dāng)你嘗試使用命令:
1 | nohup command |
時(shí)候卻會(huì)遇到不大不小的麻煩……
delectate@delectate:~$ nohup vlc
nohup: ignoring input and appending output to `nohup.out'
是的,雖然它自動(dòng)把debug信息記錄到nohup.out文件,但是你卻無法使用這個(gè)終端進(jìn)行任何操作。
所以你需要和第一個(gè)方法混用,即
nohup command {option} &
混用后,它會(huì)自動(dòng)把你執(zhí)行的命令輸出結(jié)果記錄到權(quán)限為-rw——-,名為nohup.out的文件中。
但是你仍然需要
delectate@delectate:~$ nohup vlc &
[1] 9045
delectate@delectate:~$ nohup: ignoring input and appending output to `nohup.out'
//在這里按一下回車或以ctrl+c以
//show a clean terminal
delectate@delectate:~$
與使用 “&” 性質(zhì)相同,當(dāng)前啟動(dòng)程序的終端如果沒有被關(guān)閉,已經(jīng)啟動(dòng)的程序附在pst上;如果終端被關(guān)閉,則自動(dòng)附在tty。
如果當(dāng)前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out。默認(rèn)狀態(tài)下,nohup默認(rèn)輸出到nohup.out文件,你也可以利用重定向來指定輸出文件:
nohup command {option} > myout.file 2>&1 &
只有當(dāng)虛擬終端是 $ 或者 # 時(shí)候,才可以關(guān)閉此終端,否則可能導(dǎo)致已經(jīng)啟動(dòng)的進(jìn)程被關(guān)閉(按enter——如果程序持續(xù)輸出信息而沒有出現(xiàn) $ 或 #)
擴(kuò)展資料:其他相關(guān)命令
jobs:查看當(dāng)前有多少在后臺(tái)運(yùn)行的命令
fg:將后臺(tái)中的命令調(diào)至前臺(tái)繼續(xù)運(yùn)行。如果后臺(tái)中有多個(gè)命令,可以用 fg %jobnumber將選中的命令調(diào)出,%jobnumber是通過jobs命令查到的后臺(tái)正在執(zhí)行的命令的序號(hào)(不是pid)
bg:將一個(gè)在后臺(tái)暫停的命令,變成繼續(xù)執(zhí)行。如果后臺(tái)中有多個(gè)命令,可以用bg %jobnumber將選中的命令調(diào)出,%jobnumber是通過jobs命令查到的后臺(tái)正在執(zhí)行的命令的序號(hào)(不是pid)
殺死進(jìn)程
殺死已經(jīng)啟動(dòng)的程序和普通方式一樣:
pkill -9 name
killall name
kill pid
…
命令應(yīng)用:
linux服務(wù)器掛機(jī)下載;啟動(dòng)相關(guān)服務(wù);linux服務(wù)器啟動(dòng)進(jìn)程(尤其是ssh登錄)
我就曾經(jīng)用
1 | nohup aria2c -i downloadlist -m 0 -j 1 & |
從jsharer極享下載了不少動(dòng)漫