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
默认情况下,进程是前台进程,这时就把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
相关文章推荐
- Linux shell中运行命令后加上字符“&”的作用
- Linux shell中运行命令后加上字符“&”的作用(转)
- Linux shell中运行命令后加上字符“&”的作用
- Linux shell中运行可执行程序后加上&的作用
- linux shell怎么开启多个进程 在所在的命令或者脚本后面加上&
- linux shell命令编写&&在终端输入文件名直接运行
- 'mysql' 不是内部或外部命令,也不是可运行的程序,或批处理文件。
- dos批处理中的管道命令"|"有什么作用
- 安装oralce后在cmd模式下运行java命令出错:Exception in thread "main" java.lang.UnsupportedClassVersionError: org/getopt/luke/Luke (Unsupported
- java命令运行时错误(Exception in thread "main" java.lang.NoClassDefFoundError)
- Shell脚本中滤掉"ssh -t"执行命令时返回的/r字符
- 解决:'ping' 不是内部或外部命令,也不是可运行的程序
- 'perl' 不是内部或外部命令,也不是可运行的程序
- 可用"运行(R)..."系统命令
- [运行]程序员常用的'运行'命令
- 解决:'help、ipconfig' 不是内部或外部命令,也不是可运行的程序或批处理文件
- 使用java 命令运行出现"仅当显式请求注释处理时才接受类名称"的简单处理
- 'netstat' 不是内部或外部命令,也不是可运行的程序或批处理文件-解决方案
- winXP “运行" 命令大集合
- 解决:'ping' 不是内部或外部命令,也不是可运行的程序