linux守护进程与&的区别

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 &
原文地址:https://www.cnblogs.com/miaoying/p/8716051.html