您的位置:首页 > 运维架构 > Shell

Linux shell中运行命令后加上字符“&”的作用

2014-11-12 15:08 246 查看
& 放在启动参数后面表示设置此进程为后台进程

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

如:

tianfang > run &

[1]11319

tianfang > ./game.e 1 &

进程切换到后台的时候,我们把它称为job。切换到后台时会输出相关job信息,以前面的输出为[1]11319例:[1]表示jobID是1,11319表示进程ID是11319。切换到后台的进程,仍然可以用ps命令查看。

前后台间切换

可以通过bg (background)和fg(foreground)命令将其在前后台间状态切换。

守护进程

如果一个进程永远都是以后台方式启动,并且不能受到Shell退出影响而退出,一个正统的做法是将其创建为守护进程。守护进程值得是系统长期运行的后台进程,类似Windows服务。守护进程信息通过ps–a无法查看到,需要用到–x参数,当使用这条命令的时候,往往还附上-j参数以查看作业控制信息,其中TPGID一栏为-1就是守护进程。

tianfang> ps xj

PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND

953 1190 1190 1190 ? -1 Ss 1000 0:00 /bin/sh/usr/bin/startkde

1 1490 1482 1482 ? -1 Sl 1000 0:00 /usr/bin/VBoxClient–seamless

1 1491 1477 1477 ? -1 Sl 1000 0:00 /usr/bin/VBoxClient–display

创建守护进程最关键的一步是调用setsid函数创建一个新的Session,并成为SessionLeader。成功调用该函数的结果是:

创建一个新的Session,当前进程成为SessionLeader,当前进程的id就是Session的id

创建一个新的进程组,当前进程成为进程组的Leader,当前进程的id就是进程组的id

如果当前进程原本有一个控制终端,则它失去这个控制终端,成为一个没有控制终端的进程。

更多请参考:http://www.cnblogs.com/TianFang/archive/2013/01/23/2872645.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐