bash – 验证disown命令

前端之家收集整理的这篇文章主要介绍了bash – 验证disown命令前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我发了^ z; BG; disown序列,以便允许我关闭一个ssh会话,在该会话中我运行一个超级重要的长期运行进程.此过程将状态输出写入stderr,并且即使在分离之后它仍继续这样做(使用lsof验证,stderr fd对于r / w是打开的).

有没有办法确定该进程确实已被否定(如果shell收回一个进程,则不会收回SIGHUP)?

Bash中,自己发出的disown命令将从活动作业表中删除后台(通过bg或&)进程,并将它们标记为在注销时不接收SIGHUP.

您还可以将一个或多个作业传递给disown,例如disown 1 3.如果要在表中保留作业,但在注销时仍然不是SIGHUP,则disown -h标志很有用.

您可以通过发出jobs命令来查看作业表.在成功的背景之后,它将显示[1]命令&.在取消作业后,它不应再显示在作业表中,并且在注销时不再被杀死.您仍然可以通过ps ux,top和其他流程查看实用程序查看该过程.

在作业被取消后,您可以等待它自然终止或通过kill向PID发送信号以停止它.

因为Bash只是从正在运行的作业列表中删除作业以终止并且终端的stdout和stderr的文件句柄仍然打开,所以您将继续接收作业的输出,直到您的终端设备关闭(当您注销时) .

例子:

# we start a command in the background
$cat /dev/urandom > test &
[1] 18533

# we see our command is still running
$jobs
[1]+  Running                 cat /dev/urandom > test &

# we disown the backgrounded job
$disown 1

# notice it is no longer in the job table
$jobs

我通常只使用disown,如果我运行一个可能长时间运行的命令,如rsync或cp,然后决定我需要注销而不终止它.如果您知道要运行命令并注销,则可以通过管道输入或将其发送到文件,使用nohup运行或在屏幕中运行(可以重新获得命令的所有权/之后终止).

例子:

# capture stdout and stderr to separate logs
cat /dev/urandom >stdout.log 2>stderr.log

# capture stdout and stderr to the same log,and display to stdout as well
cat /dev/urandom 2>&1 | tee output.log

# run a command under nohup (doesn't require a disown or job control support)
nohup cat /dev/urandom </dev/null
原文链接:https://www.f2er.com/bash/385830.html

猜你在找的Bash相关文章