linux 守护进程与用&结尾的后台运行程序有什么区别

默认情况下,进程是在前台运行的,这时就把shell给占据了,我们无法进行其它操作。对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个'&'实现这个目的:

zsm@wilburUbun:~/application/zookeeper-3.4.8/bin$ ./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 & 格式运行才能避免影响
(c)守护进程的会话组和当前目录,文件描述符都是独立的。后台运行只是终端进行了一次fork,让程序在后台执行,这些都没改变。


如何查看守护进程:

[plain]  view plain  copy
 
  1. ps -axj  

-a表示显示由其他用户所拥有的进程的状态

-x显示没有控制终端的进程状态

-j显示与作业有关的信息:会话ID、进程组ID等


如何编写守护进程:

可参考《unix环境高级编程》

第13章 守护进程


如何使普通进程达到守护进程的部分效果:

[plain]  view plain  copy
 
  1. 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  进程号        然后杀死此进程




你可能感兴趣的:(Linux)