首页运维零件 › HUP(hangup)信号从而关闭其所有子进程,结果却由于网络的不稳定导致任务中途失败

HUP(hangup)信号从而关闭其所有子进程,结果却由于网络的不稳定导致任务中途失败

想让进程在断开连接后依旧维持运维?假如该进度早就开始运转了该怎么补救?
假使有雅量那类须求怎么样简化操作?

Linux 技术:让进程在后台可信运营的三种方法

大家平常会遇上这么的标题,用 telnet/ssh 登入了长途的 Linux
服务器,运转了部分耗费时间较长的职务,
结果却是因为网络的不安静变成职责中途受挫。怎么样让命令提交后不受本地关闭终端窗口/互联网断开连接的搅拌呢?

下边举了有的例子, 您能够针对不相同的光景选取不一样的必定要经过之处来管理这些主题素材。

nohup/setsid/&场景:

假如只是暂且有一个发令必要长日子运作,什么艺术能最简便易行的承保它在后台牢固运转吧?

小编们精晓,当客户注销(logout)可能网络断开时,终端会接到
HUP(hangup)复信号进而关闭其全部子进度。由此,大家的清除办法就有三种门路:要么让进程忽视HUP 功率信号,要么让过程运营在新的对话里之所以成为不归于此终端的子进度。

  1. nohup

nohup 无疑是大家首先想到的不二等秘书籍。以管窥天,nohup
的用场正是让提交的指令忽视 hangup 复信号。让咱们先来看一下 nohup
的佑助新闻:

NOHUP(1)                        User Commands                        NOHUP(1)NAME       nohup - run a command immune to hangups, with output to a non-ttySYNOPSIS       nohup COMMAND [ARG]...       nohup OPTIONDESCRIPTION       Run COMMAND, ignoring hangup signals.       --help display this help and exit       --version              output version information and exit

可知,nohup 的应用是可怜有扶持的,只需在要拍卖的通令前拉长 nohup
就可以,标准输出和正式错误缺省会被重定向到 nohup.out
文件中。平日大家可在结尾加上”&”来将指令同期归入后台运转,也可用”>filename
2>&1″来变更缺省的重定向文件名。

nohup 示例

[[email protected] ~]# nohup ping www.ibm.com &[1] 3059nohup: appending output to `nohup.out'[[email protected] ~]# ps -ef |grep 3059root      3059   984  0 21:06 pts/3    00:00:00 ping www.ibm.comroot      3067   984  0 21:06 pts/3    00:00:00 grep 3059[[email protected] ~]#

2.setsid

nohup 无疑能经过忽视 HUP
时域信号来使大家的进度防止中途被搁浅,但假使大家换个角度思忖,固然大家的历程不归于接纳HUP 功率信号的极点的子进度,那么自然也就不会惨被 HUP 时限信号的影响了。setsid
就能够帮助大家成功那一点。让大家先来看一下 setsid 的帮扶音讯:

SETSID(8)                 Linux Programmer’s Manual                 SETSID(8)NAME       setsid - run a program in a new sessionSYNOPSIS       setsid program [ arg ... ]DESCRIPTION       setsid runs a program in a new session.

足见 setsid 的采用也是特别低价的,也只需在要管理的吩咐前增进 setsid
就可以。

setsid 示例

[[email protected] ~]# setsid ping www.ibm.com[[email protected] ~]# ps -ef |grep www.ibm.comroot     31094     1  0 07:28 ?        00:00:00 ping www.ibm.comroot     31102 29217  0 07:29 pts/4    00:00:00 grep www.ibm.com[[email protected] ~]#

值得注意的是,上例中大家的历程 ID(PID卡塔尔国为31094,而它的父
ID(PPID)为1(即为 init 进度 ID),并非当下极端的进度ID。请将此例与nohup 例中的父 ID 做相比较。

3.&

这里还会有四个关于 subshell
的小技术。咱们理解,将四个或多个命名包涵在“(State of Qatar”中就能够让那么些命令在子 shell
中运转中,进而扩展出无数风趣的功能,大家前几日要商量的正是个中之一。

当大家将”&”也放入“(卡塔尔”内之后,大家就能意识所提交的课业并不在作业列表中,约等于说,是力不能及通过jobs来查阅的。让大家来探视为啥如此就会躲过
HUP 功率信号的震慑啊。

subshell 示例

[[email protected] ~]# (ping www.ibm.com &)[[email protected] ~]# ps -ef |grep www.ibm.comroot     16270     1  0 14:13 pts/4    00:00:00 ping www.ibm.comroot     16278 15362  0 14:13 pts/4    00:00:00 grep www.ibm.com[[email protected] ~]#

从上例中能够见见,新交付的长河的父 ID(PPID)为1(init 进度的
PID),并非最近极端的进度ID。因而并不归于当前终端的子进度,进而也就不会蒙受当前极端的 HUP
功率信号的影响了。

disown

我们早已明白,假如事情未发生前在指令前拉长 nohup 或许 setsid 就足以制止 HUP
时域信号的熏陶。可是尽管大家未加任哪个地方理就早就交由了指令,该怎么补救技能让它防止HUP 信号的熏陶呢?

那会儿想加 nohup 只怕 setsid 已经来不比,只好通过作业调整和 disown
来清除那几个标题了。让大家来看一下 disown 的相助新闻:

disown [-ar] [-h] [jobspec ...]Without options, each jobspec is  removed  from  the  table  ofactive  jobs.   If  the -h option is given, each jobspec is notremoved from the table, but is marked so  that  SIGHUP  is  notsent  to the job if the shell receives a SIGHUP.  If no jobspecis present, and neither the -a nor the -r option  is  supplied,the  current  job  is  used.  If no jobspec is supplied, the -aoption means to remove or mark all jobs; the -r option  withouta  jobspec  argument  restricts operation to running jobs.  Thereturn value is 0 unless a jobspec does  not  specify  a  validjob.

能够看出,大家得以用如下形式来到达大家的指标。

灵活运用 CTKugaL-z

在大家的平日职业中,大家得以用 CTCRUISERL-z
来将近些日子历程挂起到后台暂停止运输转,实行一些别的操作,然后再用 fg
来将挂起的过程重新放回前台(也可用 bg
来将挂起的进程放在后台)继续运转。那样大家就能够在贰个终端内灵活切换运维多少个职责,这点在调节和测量试验代码时进一层有用。因为将代码编辑器挂起到后台再另行放回时,光标定位依然停留在上次挂起时的职位,幸免了再一次定位的分神。

用disown -h jobspec来使某个作业忽略HUP信号。用disown -ah 来使所有的作业都忽略HUP信号。用disown -rh 来使正在运行的作业忽略HUP信号。

内需静心的是,当使用过 disown
之后,会将把对象作业从作业列表中移除,大家将不可能再使用jobs来查看它,不过依然能够用ps
-ef查找到它。

然则还应该有贰个难题,这种方式的操作对象是学业,借使大家在运营命令时在终极加了”&”来使它产生多少个功课并在后台运营,那么就顺遂了,大家得以经过jobs命令来得到全体作业的列表。可是只要并不曾把当前命令作为作业来运作,怎样技艺收获它的作业号呢?答案正是用
CT揽胜极光L-z(按住Ctrl键的还要按住z键)了!
CT奥迪Q5L-z
的用项就是将前段时间历程挂起(Suspend),然后大家就足以用jobs命令来查询它的作业号,再用bg
jobspec来将它放入后台并卫冕运转。

亟待注意的是,假设挂起会影响当下进度的运作结果,请慎用此措施。

disown
示例1(借使提交命令时早就用“&”将下令放入后台运营,则足以一贯利用“disown”)

[[email protected] build]# cp -r testLargeFile largeFile &[1] 4825[[email protected] build]# jobs[1]+  Running                 cp -i -r testLargeFile largeFile &[[email protected] build]# disown -h %1[[email protected] build]# ps -ef |grep largeFileroot      4825   968  1 09:46 pts/4    00:00:00 cp -i -r testLargeFile largeFileroot      4853   968  0 09:46 pts/4    00:00:00 grep largeFile[[email protected] build]# logout

disown 示例2(假设提交命令时未接纳“&”将下令归入后台运转,可使用 CTGL450L-z
和“bg”将其放入后台,再利用“disown”)

[[email protected] build]# cp -r testLargeFile largeFile2[1]+  Stopped                 cp -i -r testLargeFile largeFile2[[email protected] build]# bg %1[1]+ cp -i -r testLargeFile largeFile2 &[[email protected] build]# jobs[1]+  Running                 cp -i -r testLargeFile largeFile2 &[[email protected] build]# disown -h %1[[email protected] build]# ps -ef |grep largeFile2root      5790  5577  1 10:04 pts/3    00:00:00 cp -i -r testLargeFile largeFile2root      5824  5577  0 10:05 pts/3    00:00:00 grep largeFile2[[email protected] build]#

screen

我们曾经精晓了哪些让进程免受 HUP
功率信号的熏陶,可是就算有恢宏这种命令供给在马放南山的后台里运转,怎样防止对每条命令都做那样的操作呢?

此刻最有利的措施正是 screen 了。总之,screen 提供了 ANSI/VT100
的顶峰模拟器,使它亦可在叁个实打实终端下运营五个全屏的伪终端。screen
的参数超级多,具备很刚劲的功能,大家在那仅介绍其常用效能以致简要深入分析一下为何选拔screen 能够制止 HUP 时域信号的熏陶。大家先看一下 screen 的扶植新闻:

SCREEN(1)                                                           SCREEN(1)NAME       screen - screen manager with VT100/ANSI terminal emulationSYNOPSIS       screen [ -options ] [ cmd [ args ] ]       screen -r [[pid.]tty[.host]]       screen -r sessionowner/[[pid.]tty[.host]]DESCRIPTION       Screen  is  a  full-screen  window manager that multiplexes a physical       terminal between several  processes  (typically  interactive  shells).       Each  virtual  terminal provides the functions of a DEC VT100 terminal       and, in addition, several control functions from the  ISO  6429  (ECMA       48,  ANSI  X3.64)  and ISO 2022 standards (e.g. insert/delete line and       support for multiple character sets).  There is a  scrollback  history       buffer  for  each virtual terminal and a copy-and-paste mechanism that       allows moving text regions between windows.

利用 screen 很方便,有以下多少个常用选项:

用screen -dmS session name来建立一个处于断开模式下的会话(并指定其会话名)。用screen -list 来列出所有会话。用screen -r session name来重新连接指定会话。用快捷键CTRL-a d 来暂时断开当前会话。

screen 示例

[[email protected] ~]# screen -dmS Urumchi[[email protected] ~]# screen -listThere is a screen on:        12842.Urumchi   (Detached)1 Socket in /tmp/screens/S-root.[[email protected] ~]# screen -r Urumchi

当我们用“-r”连接到 screen
会话后,大家就足以在那个伪终端里面胡作乱为,再也不用顾虑 HUP
时域信号会对大家的长河变成影响,也不用给各种命令前都加多“nohup”或许“setsid”了。那是干什么呢?让自家来看一下底下七个例子吗。

  1. 未选用 screen 时新进程的经过树

    [[email protected] ~]# ping www.google.com &[1] 9499[[email protected] ~]# pstree -H 9499init─┬─Xvnc ├─acpid ├─atd ├─2*[sendmail] ├─sshd─┬─sshd───bash───pstree │ └─sshd───bash───ping

我们能够见到,未利用 screen 时大家所处的 bash 是 sshd 的子进度,当 ssh
断开连接时,HUP 时限信号自然会影响到它下边包车型客车全体子进度(富含大家新创设的
ping 进度)。

  1. 运用了 screen 后新历程的历程树

    [[email protected] ~]# screen -r Urumchi[[email protected] ~]# ping www.ibm.com &[1] 9488[[email protected] ~]# pstree -H 9488init─┬─Xvnc ├─acpid ├─atd ├─screen───bash───ping ├─2*[sendmail]

而使用了 screen 后就分裂了,当时 bash 是 screen 的子进程,而 screen 是
init(PID为1)的子进度。那么当 ssh 断开连接时,HUP 信号自然不会听得多了就能够说的清楚到
screen 下边包车型大巴子进程了。

总结

今昔两种办法已经介绍达成,大家得以根据不一致的景色来抉择不一样的方案。nohup/setsid
无疑是一时半刻须要时最便利的秘技,disown
能扶植大家来现在补救当前一度在运营了的课业,而 screen
则是在大量操作时不二的选拔了。

最早的文章转发自《Linux就该如此学》:

技能:让进度在后台可信赖运营的三种格局我们平日会超越这么的难题,用 telnet/ssh 登入了中间距的 Linux
服务器,运转了有个别耗费时间较长的...

那篇文章主要给大家在呈报了在Linux中让贰个经过在后台牢固运行的能力和措施,总计如下:

咱俩常常会遇见那样的难题,用 telnet/ssh 登陆了远程的 Linux
服务器,运行了一些耗费时间较长的天职,
结果却是因为互联网的不平稳变成职责中途受挫。怎样让命令提交后不受本地关闭终端窗口、互连网断开连接的郁闷呢?

咱俩平时会遇上这么的难题,用 telnet/ssh 登入了中远间隔的 Linux
服务器,运维了部分耗费时间较长的任务,
结果却由于互连网的不安宁变成任务中途受挫。怎么样让命令提交后不受本地关闭终端窗口/互联网断开连接的侵扰呢?下边举了一些例子,
您可以本着分歧的场景选拔分歧的点子来管理这些主题材料。

图片 1

nohup/setsid/&

上面举了部分例证, 您能够针对不一样的风貌接收不相同的格局来管理这几个标题。

场景:

nohup/setsid/& 场景

一旦只是暂且有四个命令需求长日子运作,什么点子能最省事的保险它在后台稳固运营吧?

我们知晓,当顾客注销(logout)大概网络断开时,终端会选拔HUP(hangup)能量信号进而关闭其全数子进度。由此,大家的解决办法就有二种门路:要么让进度忽视HUP 时域信号,要么让进程运营在新的对话里之所以成为不归于此终端的子进度。

万三头是临时有一个发令须要长日子运作,什么办法能最方便的管教它在后台牢固运维吧?

1. nohup

nohup 无疑是大家先是想到的主意。以点带面,nohup
的用途便是让提交的授命忽视 hangup 时限信号。

nohup 的行使是特别常有利的,只需在要管理的通令前增进 nohup
就能够,规范输出和规范错误缺省会被重定向到 nohup.out
文件中。日常大家可在最终加上”&”来将下令同不平日候放入后台运维,也可用”>filename
2>&1″来退换缺省的重定向文件名。

nohup 示例

[root@pvcent107 ~]# nohup ping www.ibm.com &
[1] 3059
nohup: appending output to `nohup.out'
[root@pvcent107 ~]# ps -ef |grep 3059
root      3059   984  0 21:06 pts/3    00:00:00 ping www.ibm.com
root      3067   984  0 21:06 pts/3    00:00:00 grep 3059
[root@pvcent107 ~]#

减轻格局:

2.setsid

nohup 无疑能由此忽视 HUP
时域信号来使大家的长河幸免中途被中断,但只要我们换个角度构思,就算我们的进程不归于采纳HUP 实信号的终端的子进度,那么自然也就不会遭到 HUP 时域信号的震慑了。setsid
就能够帮助大家实现那一点。

setsid 的施用也是极其实惠的,也只需在要处理的吩咐前增加 setsid 就能够。

setsid 示例

[root@pvcent107 ~]# setsid ping www.ibm.com
[root@pvcent107 ~]# ps -ef |grep www.ibm.com
root     31094     1  0 07:28 ?        00:00:00 ping www.ibm.com
root     31102 29217  0 07:29 pts/4    00:00:00 grep www.ibm.com
[root@pvcent107 ~]#

值得注意的是,上例中我们的历程 ID(PID卡塔尔(قطر‎为31094,而它的父
ID(PPID)为1(即为 init 进度 ID),并不是当下极端的进度ID。请将此例与nohup 例中的父 ID 做相比较。

小编们知道,当顾客注销(logout)或许互联网断开时,终端会吸纳HUP(hangup)实信号进而关闭其全体子进度。由此,大家的解决办法就有二种门路:要么让进程忽视HUP 能量信号,要么让进程运行在新的对话里之所以成为不归于此终端的子进度。

3.&

那边还会有一个有关 subshell
的小才具。大家领略,将贰个或四个命名包涵在“(卡塔尔国”中就会让那一个命令在子 shell
中运作中,进而扩充出大多风趣的效力,我们今后要商讨的便是中间之一。

当大家将”&”也归入“(State of Qatar”内之后,大家就能够发掘所提交的学业并不在作业列表中,也等于说,是回天无力透过jobs来查阅的。让大家来探视为何那样就能够躲过
HUP 功率信号的熏陶呢。

subshell 示例

[root@pvcent107 ~]# (ping www.ibm.com &)
[root@pvcent107 ~]# ps -ef |grep www.ibm.com
root     16270     1  0 14:13 pts/4    00:00:00 ping www.ibm.com
root     16278 15362  0 14:13 pts/4    00:00:00 grep www.ibm.com
[root@pvcent107 ~]#

从上例中能够看看,新交付的经过的父 ID(PPID)为1(init 过程的
PID),实际不是方今极端的历程
ID。由此并不归属当前终端的子进度,进而也就不相会对当前极端的 HUP
复信号的熏陶了。

hangup 名称的因由

disown

咱俩早已知晓,借使事情发生从前在命令前增加 nohup 可能 setsid 就足以制止 HUP
时域信号的熏陶。然而假如我们未加任哪个地方理就已经付出了命令,该怎么补救工夫让它避免HUP 功率信号的震慑啊?

这儿想加 nohup 或许 setsid 已经来不比,只可以通过作业调治和 disown
来清除那个题材了。

咱俩得以用如下方式来实现大家的目标。

在 Unix 的早期版本中,各个终端都会经过 modem 和系列通信。当客商 logout
时,modem 就能挂断(hang up)电话。 同理,当 modem
断开连接时,就能够给终端发送 hangup 实信号来打招呼其停业全数子进度。

灵活运用 CT帕杰罗L-z

在我们的日常性工作中,大家得以用 CTTucsonL-z
来将近些日子经过挂起到后台暂停止运输营,实践一些别的操作,然后再用 fg
来将挂起的长河重新放回前台(也可用 bg
来将挂起的进程放在后台)继续运营。那样我们就可以在一个终极内灵活切换运营多个职分,那一点在调治代码时越发有用。因为将代码编辑器挂起到后台再另行放回时,光标定位依然停留在上次挂起时的岗位,制止了再度定位的麻烦。

  • 用disown -h jobspec来使有个别作业忽视HUP时限信号。
  • 用disown -ah 来使全部的作业都忽视HUP时域信号。
  • 用disown -rh 来使正在运营的功课忽视HUP时域信号。

须求在乎的是,当使用过 disown
之后,会将把对象作业从作业列表中移除,大家将不能够再使用jobs来查阅它,不过仍旧可以用ps
-ef查找到它。

而是还会有一个题材,这种情势的操作对象是学业,假如咱们在运维命令时在结尾加了”&”来使它形成多个学业并在后台运维,那么就高枕而卧了,大家能够透过jobs命令来获取全部作业的列表。

可是假设并从未把近年来下令作为作业来运维,怎么着技艺博得它的作业号呢?答案正是用
CT悍马H2L-z(按住Ctrl键的同时按住z键)了!

CT君越L-z
的用途就是将近年来经过挂起(Suspend),然后大家就足以用jobs命令来询问它的作业号,再用bg
jobspec来将它纳入后台并持续运转。

须求注意的是,假使挂起会影响当下进度的运行结果,请慎用此措施。

disown
示例1(倘使提交命令时曾经用“&”将下令放入后台运转,则足以一向运用“disown”)

[root@pvcent107 build]# cp -r testLargeFile largeFile &
[1] 4825
[root@pvcent107 build]# jobs
[1]+  Running                 cp -i -r testLargeFile largeFile &
[root@pvcent107 build]# disown -h %1
[root@pvcent107 build]# ps -ef |grep largeFile
root      4825   968  1 09:46 pts/4    00:00:00 cp -i -r testLargeFile largeFile
root      4853   968  0 09:46 pts/4    00:00:00 grep largeFile
[root@pvcent107 build]# logout

disown 示例2(假若提交命令时未利用“&”将下令放入后台运维,可利用 CTavancierL-z
和“bg”将其放入后台,再使用“disown”)

[root@pvcent107 build]# cp -r testLargeFile largeFile2

[1]+  Stopped                 cp -i -r testLargeFile largeFile2
[root@pvcent107 build]# bg %1
[1]+ cp -i -r testLargeFile largeFile2 &
[root@pvcent107 build]# jobs
[1]+  Running                 cp -i -r testLargeFile largeFile2 &
[root@pvcent107 build]# disown -h %1
[root@pvcent107 build]# ps -ef |grep largeFile2
root      5790  5577  1 10:04 pts/3    00:00:00 cp -i -r testLargeFile largeFile2
root      5824  5577  0 10:05 pts/3    00:00:00 grep largeFile2
[root@pvcent107 build]#

1. nohup

screen

作者们早就清楚了何等让进度免受 HUP
复信号的熏陶,然而假如有大量这种命令要求在牢固的后台里运营,如何防止对每条命令都做那样的操作呢?

此时最方便的方法正是 screen 了。同理可得,screen 提供了 ANSI/VT100
的终端模拟器,使它能够在一个真正终端下运作四个全屏的伪终端。screen
的参数非常多,具备很刚劲的功用,大家在这里仅介绍其常用功效以至简要分析一下为啥使用
screen 能够制止 HUP 功率信号的熏陶。

采用 screen 很有益于,有以下多少个常用选项:

  • 用screen -dmS session
    name来创设一个介乎断开情势下的对话(并内定其会话名)。
  • 用screen -list 来列出全部会话。
  • 用screen -r session name来重新连接钦点会话。
  • 用飞速键CTTiguanL-a d 来临时断开当前对话。

screen 示例

[root@pvcent107 ~]# screen -dmS Urumchi
[root@pvcent107 ~]# screen -list
There is a screen on:
        12842.Urumchi   (Detached)
1 Socket in /tmp/screens/S-root.

[root@pvcent107 ~]# screen -r Urumchi

当大家用“-r”连接到 screen
会话后,大家就足以在此个伪终端里面胡作非为,再也不用担忧 HUP
确定性信号会对大家的进程变成影响,也不用给各种命令前都抬高“nohup”或许“setsid”了。这是为什么吧?让本人来看一下下边五个例证吗。

  1. 未接收 screen 时新历程的长河树

    [root@pvcent107 ~]# ping www.google.com &
    [1] 9499
    [root@pvcent107 ~]# pstree -H 9499
    init─┬─Xvnc

      ├─acpid
      ├─atd
      ├─2*[sendmail] 
      ├─sshd─┬─sshd───bash───pstree
      │       └─sshd───bash───ping
    

我们得以观察,未利用 screen 时大家所处的 bash 是 sshd 的子进程,当 ssh
断开连接时,HUP 能量信号自然会耳闻则诵到它上边包车型客车全数子进程(富含大家新建设布局的
ping 进度)。

  1. 使用了 screen 后新进程的进度树

    [root@pvcent107 ~]# screen -r Urumchi
    [root@pvcent107 ~]# ping www.ibm.com &
    [1] 9488
    [root@pvcent107 ~]# pstree -H 9488
    init─┬─Xvnc

      ├─acpid
      ├─atd
      ├─screen───bash───ping
      ├─2*[sendmail]
    

而使用了 screen 后就分裂了,那个时候 bash 是 screen 的子进度,而 screen 是
init(PID为1)的子进度。那么当 ssh 断开连接时,HUP 时域信号自然不会耳闻则诵到
screen 上边包车型地铁子进度了。

nohup 无疑是咱们先是想到的艺术。一孔之见,nohup
的用途正是让提交的一声令下忽略 hangup 非功率信号。让我们先来看一下 nohup
的帮忙音讯:

总结

当今二种方法已经介绍完结,大家得以依靠分化的情景来选用区别的方案。nohup/setsid
无疑是有时供给时最有益的艺术,disown
能扶持大家来之后补救当前一度在运维了的课业,而 screen
则是在多量操作时不二的筛选了。

NOHUP(1)            User Commands            NOHUP(1)
NAME
    nohup - run a command immune to hangups, with output to a non-tty
SYNOPSIS
    nohup COMMAND [ARG]...
    nohup OPTION

DESCRIPTION
    Run COMMAND, ignoring hangup signals.
    --help display this help and exit
    --version
       output version information and exit

可知,nohup 的应用是极度有助于的,只需在要拍卖的一声令下前增加 nohup
就可以,规范输出和标准错误缺省会被重定向到 nohup.out
文件中。常常大家可在最终加上"&"来将指令同一时候归入后台运维,也可用">filename
2>&1"来更改缺省的重定向文件名。

nohup 示例

[root@pvcent107 ~]# nohup ping www.ibm.com &
[1] 3059
nohup: appending output to `nohup.out'
[root@pvcent107 ~]# ps -ef |grep 3059
root   3059  984 0 21:06 pts/3  00:00:00 ping www.ibm.com
root   3067  984 0 21:06 pts/3  00:00:00 grep 3059
[root@pvcent107 ~]#

2、setsid

nohup 无疑能透过忽略 HUP
功率信号来使大家的经过制止中途被暂停,但借使我们换个思路动脑,假设大家的长河不归于选拔HUP 时域信号的巅峰的子进程,那么自然也就不会遇到 HUP 随机信号的影响了。setsid
就能够扶植大家成功那或多或少。让大家先来看一下 setsid 的佑助音信:

SETSID(8)         Linux Programmer's Manual         SETSID(8)
NAME
    setsid - run a program in a new session 
SYNOPSIS
    setsid program [ arg ... ]
DESCRIPTION
    setsid runs a program in a new session.

可以看到 setsid 的应用也是这个便利的,也只需在要拍卖的指令前增进 setsid
就能够。

setsid 示例

[root@pvcent107 ~]# setsid ping www.ibm.com
[root@pvcent107 ~]# ps -ef |grep www.ibm.com
root   31094   1 0 07:28 ?    00:00:00 ping www.ibm.com
root   31102 29217 0 07:29 pts/4  00:00:00 grep www.ibm.com
[root@pvcent107 ~]#

值得注意的是,上例中大家的历程 ID(PID卡塔尔(قطر‎为31094,而它的父
ID(PPID)为1(即为 init 进程 ID),实际不是当前终端的进度ID。请将此例与nohup 例中的父 ID 做相比。

3、这里还应该有一个有关 subshell
的小技艺。我们知道,将三个或七个命名包罗在“(卡塔尔”中就能够让那一个命令在子 shell
中运营中,进而增添出累累有趣的意义,大家明天要研究的正是里面之一。
当大家将"&"也放入“(卡塔尔”内之后,大家就能够意识所提交的功课并不在作业列表中,也正是说,是无计可施透过jobs来查看的。让大家来探问为何如此就能够躲过
HUP 复信号的影响吗。

转载本站文章请注明出处:vns威尼斯城官网登入 http://www.tiec-ccpittj.com/?p=5027

上一篇:

下一篇:

相关文章