默认情况下,进程是在前台运行的,这时就把shell给占据了,我们无法进行其它操作。对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个’&'实现这个目的:
zsm@wilburUbun:~/application/zookeeper-3.4.8/bin$Misplaced & ./zkServer.sh start &
[1] 21304
zsm@wilburUbun:~/application/zookeeper-3.4.8/bin$ ZooKeeper JMX enabled by default
Using config: /home/zsm/application/zookeeper-3.4.8/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[1]+ Done ./zkServer.sh start
切换到后台的进程称为job。切换到后台时会输出相关job信息,以前面的输出[1] 21304为例:[1]表示job ID,21304表示进程ID是21304。 切换到后台的进程,仍然可以用ps命令查看,或通过jobs命令只查看所有job(后台进程)。
后台进程会随着Shell的退出而结束。
最大的区别有几点:
(a)守护进程已经完全脱离终端控制台了,而后台程序并未完全脱离终端,在终端未关闭前还是会往终端输出结果
(b)守护进程在关闭终端控制台时不会受影响,而后台程序会随用户退出而停止,需要在以nohup command & 格式运行才能避免影响
©守护进程的会话组和当前目录,文件描述符都是独立的。后台运行只是终端进行了一次fork,让程序在后台执行,这些都没改变。
如何查看守护进程:
ps -axj
-a表示显示由其他用户所拥有的进程的状态
-x显示没有控制终端的进程状态
-j显示与作业有关的信息:会话ID、进程组ID等
如何编写守护进程:
可参考《unix环境高级编程》
第13章 守护进程
如何使普通进程达到守护进程的部分效果:
nohup ./a.out &
1.nohup
用途:不挂断地运行命令,即使终端ssh关闭了也一直运行。
语法:nohup Command [ Arg … ][ & ]
例:nohup start.sh &
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。nohup.out相对于日志
如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
2.&
用途:在后台运行,当关闭了ssh终端,程序也会关闭
一般这种程序使用 & 结尾,但是如果终端关闭,那么程序也会被关闭。
例: start.sh &
3.ps -aux
ps -aux 可以查看进程,
kill -9 进程号 然后杀死此进程
来源:CSDN
原文:https://blog.csdn.net/pursuer211/article/details/78932394