Linux shell中运行可执行程序后加上&的作用

来源:互联网 发布:搞笑文案知乎 编辑:程序博客网 时间:2024/06/07 06:14

学习UNP时,学到了在命令后加上字符“&”后,退出shell,运行的命令可以继续运行。不解原因,并到网上搜索了以下,明白了!

以下是搜索到的片段:

& 放在启动参数后面表示设置此进程为后台进程

默认情况下,进程是前台进程,这时就把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
0 0