用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参数…。 |