zoukankan      html  css  js  c++  java
  • Linux shell中运行命令后加上字符“&”的作用

    上午登录服务器编译运行服务端程序的时候,学到了在命令后加上字符“&”后,退出shell,运行的命令可以继续运行。不解原因,并到网上搜索了以下,明白了点!

    以下是搜索到的片段:

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

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

    如:

    tianfang > run &
        [1] 11319
    tianfang > ./game.e 1 &

    进程切换到后台的时候,我们把它称为job。切换到后台时会输出相关job信息,以前面的输出为[1] 11319例:[1]表示job ID是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,并成为Session Leader。成功调用该函数的结果是:

    • 创建一个新的Session,当前进程成为Session Leader,当前进程的id就是Session的id
    • 创建一个新的进程组,当前进程成为进程组的Leader,当前进程的id就是进程组的id
    • 如果当前进程原本有一个控制终端,则它失去这个控制终端,成为一个没有控制终端的进程。

    更多请参考:http://www.cnblogs.com/TianFang/archive/2013/01/23/2872645.html

    转自 http://blog.sina.com.cn/s/blog_963453200102uya7.html

  • 相关阅读:
    oracle 导入数据时提示只有 DBA 才能导入由其他 DBA 导出的文件
    oracle 常用语句
    android udp 无法收到数据 (模拟器中)
    android DatagramSocket send 发送数据出错
    AtCoder ABC 128E Roadwork
    AtCoder ABC 128D equeue
    AtCoder ABC 127F Absolute Minima
    AtCoder ABC 127E Cell Distance
    CodeForces 1166E The LCMs Must be Large
    CodeForces 1166D Cute Sequences
  • 原文地址:https://www.cnblogs.com/perfei/p/5648680.html
Copyright © 2011-2022 走看看