Omn*_*ous 4 linux bash job-control
我知道nohup并且它不会做我想要的:
例子:
$ nohup sleep 600 2>/dev/null >/dev/null </dev/null&
[1] 21844
$ ps -ef | fgrep -e 'sleep
> TTY'
UID PID PPID C STIME TTY TIME CMD
me 21844 19313 0 09:37 pts/9 00:00:00 sleep 600
Run Code Online (Sandbox Code Playgroud)
如您所见,睡眠仍然pts/9作为控制终端。我不希望它有任何控制终端。部分是因为我想使用的程序(sleep如果你没有猜到就不是)试图打开控制终端来问我问题,如果不能,我想看看它的行为。我该如何做到这一点?
setsidLinux 上的实用程序可以做到这一点。在 Fedora 上,它是util-linux软件包的一部分。这是包含之类相同的包mount,mkfs,/usr/bin/kill,和其他类似的东西。
这是一个 FreeBSD 解决方案,但也许类似的技术也适用于您的操作系统。
我知道 cron 并不完全是命令行,但如果您有要运行的特定命令列表,cron 可以做到这一点。您可能希望避免 cron 重复运行该作业,也许可以通过围绕所需的命令列表制作一个包装器,例如:
#!/bin/sh
[ -f /tmp/my-semaphore-file ] || {
touch /tmp/my-semaphore-file
my_command_stack > /dev/null 2>&1
}
Run Code Online (Sandbox Code Playgroud)
对于生产用途来说可能不太优雅,但如果您只想测试命令堆栈在没有控制终端的情况下的执行情况,那就可以了。包装器将不允许 cron 再次运行该命令,直到您:
rm /tmp/my-semaphore-file
Run Code Online (Sandbox Code Playgroud)
at(1)也是一个选项,并且“几乎”是一个命令行解决方案:
echo 'my_command_stack > /dev/null 2>&1' | at now+1 minute
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1124 次 |
| 最近记录: |