1.默认情况下,进程是在前台运行的,这时就把shell占据了(有很多日志打印输出),我们无法进行其他操作。所以对于没有交互的进程,很多时候我们希望将其在后台启动,可以在启动参数的时候加一个&实现这个目的。
2.切换到后台的进程称为job,切换到后台时会输出相关job信息:
miaoying@miaoying-OptiPlex-7040:~$ python3 ~/.local/lib/python3.5/site-packages/pgadmin4/pgAdmin4.py &[1] 12225
例如这个: [1] 12225
[1] 表示job的ID,12225表示进程ID是12225。切换到后台的进程,仍然可以用ps命令查看,或通过jobs命令只查看所有job(后台进程)。
后台进程会随着shell的退出而结束。
3.守护进程已经完全脱离终端控制了,而后台进程并未完全脱离终端,在终端未关闭前还是会往终端输出结果。
4.守护进程在关闭终端控制台时不会受影响,而后台程序会随用户退出而停止,需要在以nohup command &格式运行才能避免影响。
5.守护进程的会话组和当前目录,文件描述符都是独立的,后台运行只是终端进行了一次fork,让程序在后台执行,这些都没改变。
查看守护进程:
ps -axj
-a表示显示由其他用户所拥有的进程的状态
-x显示没有控制终端的进程状态
-j显示与作业有关的信息:会话ID、进程组ID等
6.使普通进程达到守护进程的部分效果:
nohup ./a.out &
7.nohup
用途:不挂断地运行命令,即使终端ssh关闭了也一直运行
语法:nohup command [arg ...] [ & ]
as:
nohup ./start.sh &
无论是否将nohup命令的输出重定向到终端,输出都将附加到当前目录的nohup.out文件中。如果当前目录的nohup.out文件不可写,输出重定向到$HOME/nohup.out文件中。如果没有文件能创建或打开以用于追加,那么command参数指定的命令不可调用。
8.&
用途:在后台运行,当关闭了ssh终端,程序也会关闭
as:
start.sh &