linux命令后台执行

nohup &

kill -l 查看系统支持的信号
kill -l 1 编号1表示信号SIGHUP,退出终端时会发送信号SIGHUP.
kill -l 2 编号2表示信号SIGINT,终端里用Ctrl+C发送SIGINT,用Ctrl+Z发送SIGTSTP,可以使用stty -a查看更多终端控制字符
kill -l 9 编号1表示信号SIGKILL,强行结束进程.
kill -l 15 编号15表示信号SIGTERM,kill默认发送的信号,通知程序正常退出.

nohup vmstat 1 >vmstat.log 2>&1 &

发送信号HUP给vmstat进程:

kill -1 `pgrep vmstat`

pgrep vmstat 因为nohup忽略了HUP信号,所以vmstat没有退出.

退出终端时会发送信号SIGHUP(编号1)给vmstat进程,但nohup会忽略掉SIGHUP信号,因此vmstat不会退出.
但Ctrl+C会终止,因为Ctrl+C发送的信号是SIGINT(编号2).

vmstat 1 >vmstat.log 2>&1 &

末尾的"&"用于把vmstat放到后台运行,退出终端时(比如关闭terminal或者ssh连接)vmstat也会退出.

当进程不是守护进程时,不能简单地在命令行后添加一个&,当终端关闭时,该进程也随之关闭。因为通常在终端起动的进程其父进程是终端进程。当终端关闭时,其所有子进程也随之关闭。使进程在后台执行需要使用nohup命令:

nohup command > out.log 2>&1 &

nohup的作用是将进程的父进程设置为1,即init进程,这样终端关闭时,不会影响该进程。

2>&1

shell中可能经常能看到

/dev/null 2>&1

/dev/null 代表空设备文件

> 代表重定向到哪里,例如:echo "123" > /home/123.txt
1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1

那么:

1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。

2>&1 接着,标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

你可能感兴趣的:(linux命令后台执行)