前往顾页
以后地位: 主页 > 精通Office > Ubuntu教程 >

linux过程背景运行的几种体例

时候:2018-10-30 13:14来源:知行网www.zhixing123.cn 编辑:麦田守望者

Ctrl+z/bg/nohup/setsid/&

在Linux中,如果要让过程在背景运行,一般环境下,我们在号令前面加上&便可,实际上,如许是将号令放入到一个功课队列中了:

 

 

# ./rsync.sh &
# jobs

 


对已在前台履行的号令,也能够从头放到背景履行,起首按ctrl+z停息已运行的过程,然后利用bg号令将停止的功课放到背景运行:bg %1,放回前台运行:%1。

但是如上方到背景履行的过程,其父过程还是以后终端shell的过程,而一旦父过程加入,则会发送hangup旌旗灯号给所有子过程,子过程收到hangup今后也会加入。如果我们要在加入shell的时候继续运行过程,则需求利用nohup忽视hangup旌旗灯号,或setsid将将父过程设为init过程(过程号为1):

 

 

# nohup ./rsync.sh &

# setsid ./rsync.sh &

# (./rsync.sh &) ////在一个subshell中履行
# ps -ef|grep rsync

 


nohup 的用处就是让提交的号令忽视 hangup 旌旗灯号,标准输入和标准错误缺省会被重定向到 nohup.out 文件中。。一般我们可在末端加上”&”来将号令同时放入背景运行,也可用” > log.out 2>&1”来变动缺省的重定向文件名。

下面的实验演示了利用nohup/setsid加上&使过程在背景运行,同时不受以后shell加入的影响。那么对已在背景运行的过程,该怎样办呢?可利用disown号令:

 

 

# jobs
# disown -h %1
# ps -ef|grep rsync

 


结果与setid不异,但是disown后无法经由过程jobs号令检察了。

screen

另有一种更加强年夜的体例是利用screen,起首建立一个断开形式的假造终端,然后用-r选项从头连接这个假造终端,在此中履行的任何号令,都能到达nohup的结果,这在有多个号令需求在背景持续履行的时候比较便利。

GNU Screen是一款由GNU打算开辟的用于号令行终端切换的自由软件。用户可以经由过程该软件同时连接多个本地或长途的号令行会话,并在其间自由切换,可以看作是窗口办理器的号令行界面版本。它供应了同一的办理多个会话的界面和呼应的服从。

 

# yum install screen -y

 


常常利用screen参数:

 

 

# screen -S docker-d 新建一个名叫docker-d的session,并顿时进入
# screen -dmS docker-d 新建一个名叫docker-d的session,但暂不进入,可用于体系启动脚本里
# screen -ls 列出以后所有session
# screen -r docker-d 规复到zhouxiao这个session,前提是已经是断开状况(-d可以长途断闭会话)
# screen -x docker-d 连接到离线形式的会话(多窗口同步演示)

# screen ./rsync.sh screen建立一个履行脚本的单窗口会话,可以attach过程ID
# screen -wipe 查抄目前所有的screen功课,并删除已无法利用的screen功课

 


一般环境下,当你加入一个窗口中最后一个法度(凡是是bash)后,这个窗口就封闭了。另外一个封闭窗口的体例是利用C-a k,这个疾速键杀死以后的窗口,同时也将杀死这个窗口中正在运行的过程。

在每个screen session 下,所有号令都以 ctrl+a(C-a) 开端。

 

 

C-a w 显现所有窗口列表
C-a k 这个疾速键杀死以后的窗口,同时也将杀死这个窗口中正在运行的过程。
C-a d detach,临时分开以后session

 


需求体味的是,一个用户建立的screen,其他用户(乃至root)经由过程screen -ls是看不见的。别的,Ctrl+a在bash下是用来回到行开首,不幸与下面的组合疾速键抵触。

下面只是根基也是最常常利用的用法,更多请参考man screen或linux screen 号令详解。
 

------分开线----------------------------
标签(Tag):Linux linux过程背景运行
------分开线----------------------------
保举内容
猜你感兴趣