让Linux终端中试行的次第在后台运营,linux将先后嵌入后台试行

By admin in 美高梅手机版4858 on 2019年5月4日

翻开运行的历程  ps -aux|grep java

在Linux中,假若要让进程在后台运维,一般意况下,我们在命令后边加上&就可以,实际上,那样是将指令放入到二个作业队列中了:

让Linux终端中奉行的程序在后台运维

在Linux中,借使要让进度在后台运营,一般情状下,我们在命令前边加上&就能够,实际上,那样是将指令放入到一个学业队列中了:

  $ ./test.sh &

  [1] 17208

  $ jobs -l

  [1]+ 17208 Running ./test.sh &

  对于曾经在前台实践的下令,也足以再一次放到后台试行,首先按ctrl+z暂停已经运转的进程,然后利用bg命令将适可而止的功课放到后台运营:

  $ ./test.sh

  [1]+ Stopped ./test.sh

  $ bg %1

  [1]+ ./test.sh &

  $ jobs -l

  [1]+ 22794 Running ./test.sh &

  不过如上方到后台施行的经过,其父进度照旧脚下终端shell的历程,而若是父进度退出,则会发送hangup时限信号给全体子进度,子进度收到hangup未来也会退出。假若大家要在剥离shell的时候继续运转进程,则需求运用nohup忽略hangup非确定性信号,恐怕setsid将将父进度设为init进度(进度号为一)

  $ echo $$

  21734

  $ nohup ./test.sh &

  [1] 29016

  $ ps -ef | grep test

  515 29710 21734 0 11:47 pts/12 00:00:00 /bin/sh ./test.sh

  515 29713 21734 0 11:47 pts/12 00:00:00 grep test

  $ setsid ./test.sh &

  [1] 409

  $ ps -ef | grep test

  515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh

  515 413 21734 0 11:49 pts/12 00:00:00 grep test

  上面包车型大巴考察示范了动用nohup/setsid加上&使进度在后台运维,同时不受当前shell退出的熏陶。那么对于早已在后台运营的进程,该如何是好呢?能够动用disown命令:

  $ ./test.sh &

  [1] 2539

  $ jobs -l

  [1]+ 2539 Running ./test.sh &

  $ disown -h %1

  $ ps -ef | grep test

  515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh

  515 2542 21734 0 11:52 pts/12 00:00:00 grep test

  其余还有一种方式,固然将经过在1个subshell中推行,其实那和setsid不约而合。方法很轻松,将下令用括号()
括起来就可以:

  $ (。/test.sh &)

  $ ps -ef | grep test

  515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh

  515 12483 21734 0 11:59 pts/12 00:00:00 grep test

  注:本文试验环境为Red Hat Enterprise Linux AS release 4 (Nahant
Update
5),shell为/bin/bash,分歧的OS和shell也许命令有个别不一致。比方AIX的ksh,未有disown,可是能够运用nohup
-p PID来获得disown一样的职能。

  还有壹种更抓牢硬的方法是应用screen,首先创设叁个断开格局的虚构终端,然后用-r选项重新连接这些编造终端,在里头实践的任何命令,都能落得nohup的法力,那在有多少个指令须求在后台三番五次施行的时候可比便利:

  $ screen -dmS screen_test

让Linux终端中试行的次第在后台运营,linux将先后嵌入后台试行。  $ screen -list

  There is a screen on:

  27963.screen_test (Detached)

  1 Socket in /tmp/uscreens/S-jiangfeng.

  $ screen -r screen_test

连带命令:

jobs————查看在后台执行的进度

fg
%n———-将后台实施进程n调到前台推行,n表示jobnumber(通过jobs查看的进度编号,而非pid)

ctrl+z———-就要前台实行的历程,放到后台并挂起

bg %n———将要后台挂起的进度,继续施行

ctrl+c———-前台进度终止

kill
%n———杀掉后台运维的进度,n表示jobnumber(通过jobs查看的经过编号,而非pid)

在Linux中,如若要让进度在后台运转,一般景色下,大家在指令前面加上就能够,实际上,那样是将命令…

 

美高梅手机版4858 1

  $ ./test.sh &

测试脚本test.sh:

找到要刨除的经过的数码

  [1] 17208

 

杀死进度  kill -玖 18八三(进度编号)

  $ jobs -l

i=1

重启服务 sh satrtBussinessService.sh

  [1]+ 17208 Running ./test.sh &

while :

 

  对于已经在前台实施的指令,也得以重复放到后台实行,首先按ctrl+z暂停已经运营的进程,然后使用bg命令将结束的学业放到后台运营:

do

  $ ./test.sh

    echo $i

  [1]+ Stopped ./test.sh

    sleep 1

  $ bg %1

    ((i++))

  [1]+ ./test.sh &

done一、当在前台运营有个别作业时,终端会被该学业并吞,从而要求再开三个巅峰来拓展其余的操作,为了幸免这种不便利大家能够将作业放到后台实践,首要有二种办法

  $ jobs -l

 

  [1]+ 22794 Running ./test.sh &

1、&命令

  不过如上方到后台施行的经过,其父进度依然当下极端shell的历程,而只要父进度退出,则会发送hangup时限信号给全部子进程,子进度收到hangup今后也会脱离。借使大家要在退出shell的时候继续运营进程,则须求选拔nohup忽略hangup频域信号,大概setsid将将父进度设为init进度(进度号为一)

 

  $ echo $$

sh test.sh &

  21734

 

  $ nohup ./test.sh &

该命令将脚本放到后台实行,不过正式输出还是会呈现到当下终端,影响用户操作,所以最棒是将出口重定向到别的文件

  [1] 29016

 

  $ ps -ef | grep test

sh test.sh &>/dev/null

  515 29710 21734 0 11:47 pts/12 00:00:00 /bin/sh ./test.sh

 

  515 29713 21734 0 11:47 pts/12 00:00:00 grep test

倘诺急需查阅输出结果,也足以定向到二个原则性的文件中。

  $ setsid ./test.sh &

 

  [1] 409

二、通过ctrl+z;bg等一各个的吩咐,将已经在前台运营的课业放到后台施行

  $ ps -ef | grep test

 

  515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh

如果1个作业已经在前台试行,可以透过ctrl+z将该学业放到后台并挂起。然后经过jobs命令查看在后台实施的学业并找到呼应的学业ID,试行bg
%n(n为通过jobs查到的课业ID)唤醒该学业继续实行。

  515 413 21734 0 11:49 pts/12 00:00:00 grep test

 

  上边的侦察示范了动用nohup/setsid加上&使进度在后台运营,同时不受当前shell退出的熏陶。那么对于曾经在后台运营的进度,该怎么做吧?能够行使disown命令:

该办法也设有结果会输出到终端上的状态,一样能够用重定向的秘诀化解

  $ ./test.sh &

 

  [1] 2539

有关命令:

  $ jobs -l

 

  [1]美高梅手机版4858,+ 2539 Running ./test.sh &

jobs————查看在后台施行的进度

  $ disown -h %1

 

  $ ps -ef | grep test

fg
%n———-将后台实施进度n调到前台实践,n表示jobnumber(通过jobs查看的长河编号,而非pid)

  515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh

 

  515 2542 21734 0 11:52 pts/12 00:00:00 grep test

ctrl+z———-将要前台试行的经过,放到后台并挂起

  别的还有一种艺术,纵然将经过在一个subshell中推行,其实那和setsid异途同归。方法很轻松,将下令用括号()
括起来就可以:

 

  $ (。/test.sh &)

bg %n———将要后台挂起的进程,继续执行

  $ ps -ef | grep test

 

  515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh

ctrl+c———-前台进度终止

  515 12483 21734 0 11:59 pts/12 00:00:00 grep test

 

  注:本文试验情形为Red
Hat Enterprise Linux AS
release 肆 (Nahant Update
伍),shell为/bin/bash,不一样的OS和shell只怕命令有些区别样。举个例子AIX的ksh,未有disown,然而足以应用nohup
-p PID来获得disown一样的效用。

kill
%n———杀掉后台运转的进程,n表示jobnumber(通过jobs查看的进度编号,而非pid)

  还有一种更抓实硬的办法是行使screen,首先创造三个断开情势的虚拟终端,然后用-r选项重新连接那一个虚拟终端,在中间进行的其余命令,都能达到规定的标准nohup的机能,这在有多少个指令需求在后台三番五次举行的时候相比便利:

 

  $ screen -dmS screen_test

 

  $ screen -list

 

  There is a screen on:

二、当用户注销只怕互联网中断时,终端后收到SIGHUP随机信号,从而关闭其全数子进程,以上二种格局会趁机终端的停业而脱离,假设大家要求作业在后台实施并不受终端退出的震慑,能够用上边两种艺术

  27963.screen_test (Detached)

 

  1 Socket in /tmp/uscreens/S-jiangfeng.

1、nohup命令

  $ screen -r screen_test

 

有关命令:

nohup sh test.sh &>/dev/null &

jobs————查看在后台奉行的进度

 

fg
%n———-将后台试行进度n调到前台施行,n表示jobnumber(通过jobs查看的进程编号,而非pid)

nohup命令会忽略SIGHUP实信号,从而终端退出时不会影响到后台作业

ctrl+z———-就要前台试行的进度,放到后台并挂起

 

bg %n———就要后台挂起的长河,继续实施

2、将作业挂到新的对话上面

ctrl+c———-前台进度终止

 

kill
%n———杀掉后台运营的进度,n表示jobnumber(通过jobs查看的经过编号,而非pid)

(sh test.sh &>/dev/null &)或许将sh test.sh &>/dev/null
&放到另一个剧本中运行都能够兑现

美高梅手机版4858 2

 

将&也放入()后,我们会意识所提交的功课并不在作业列表中,也正是说,是心有余而力不足透过jobs来查看的,通过ps查看开掘新的学业的PPID是1而不是终端的PID,所以终端退出后不会潜移默化大家的功课

 

 

 

三、其它screen命令也得以兑现相应的成效,并能化解程序要求人机交互的主题材料

 

 

 

正文出自 “Farmer-Hold” 博客

i=1 while : do echo $i sleep 一((i++))
done壹、当在前台运营有个别作业时,终端会被该学业吞没,从而供给再开二个巅峰来拓展任何…

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有