用nohup可以啟動一個后台進程。讓一個占用前台的程序在后台運行,並靜默輸出日志到文件:
nohup command > logfile.txt &
但是如果需要結束這個進程,一般做法是用ps命令找出這個進程,用grep過濾進程名,最后得到pid,然后再用kill命令結束進程:
ps -ax | grep command # 查看PID kill -9 [PID] # 結束PID對應的進程
有一個更簡單的辦法是,在用nohup創建進程時,就用shell的特殊變量$!把最后一個后台進程的PID保存下來:
nohup command > logfile.txt & echo $! > pidfile.txt
需要結束進程的時候,直接進行kill:
kill -9 `cat pidfile.txt`
附:Shell中的特殊變量說明
變量 | 說明 |
---|---|
$$ | Shell本身的PID(ProcessID) |
$! | Shell最后運行的后台Process的PID |
$? | 最后運行的命令的結束代碼(返回值) |
$- | 使用Set命令設定的Flag一覽 |
$* | 所有參數列表。如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。 |
$@ | 所有參數列表。如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數。 |
$# | 添加到Shell的參數個數 |
$0 | Shell本身的文件名 |
$1~$n | 添加到Shell的各參數值。$1是第1參數、$2是第2參數…。 |
參考:
http://www.jianshu.com/p/5a04e2452e3f(以上內容轉自此篇文章)