gpt4 book ai didi

linux - 抑制 fork 命令被杀死的通知

转载 作者:太空狗 更新时间:2023-10-29 11:23:47 25 4
gpt4 key购买 nike

假设我有一个 bash 脚本 (foo.sh),其形式非常简单,如下所示:

echo "hello"
sleep 100 &
ps ax | grep sleep | grep -v grep | awk '{ print $1 } ' | xargs kill -9
echo "bye"

第三行模仿pkill,我在Mac OS X上默认没有,但是你可以认为它和pkill一样。但是,当我运行此脚本时,我得到以下输出:

hello
foo: line 4: 54851 Killed sleep 100
bye

如何取消中间的行,以便我只看到 hellobye

最佳答案

虽然 disown 可能会产生使消息静音的副作用;这就是您以一种消息真正静音的方式启动流程,而不必放弃流程的作业控制。

{ command & } 2>/dev/null

如果您仍然想要命令自己的 stderr(只是在 stderr 上屏蔽 shell 的消息),您需要将进程的 stderr 发送到真正的 stderr:

{ command 2>&3 & } 3>&2 2>/dev/null

要了解重定向的工作原理:

顺便说一下; don't use kill -9 .

我也觉得有义务评论您的:

ps ax | grep sleep | grep -v grep | awk '{ print $1 } ' | xargs kill -9

这会让任何 UNIX/Linux 用户眼前一亮。而且,每次解析ps,都会死一个仙女。这样做:

kill $!

即使像 pgrep 这样的工具在设计上也基本上是错误的。虽然他们在匹配流程方面做得更好,但根本的缺陷仍然存在:

  • 种族:当您获得 PID 输出并将其重新解析并用于其他用途时,PID 可能已经消失,甚至被完全不相关的进程所取代。
  • 责任:在 UNIX 进程模型中,父进程有责任管理其子进程,其他任何人都不应该这样做。如果 parent 希望能够向其发送信号并且只有 parent 可以可靠地这样做, parent 应该保留其 child 的 PID。 UNIX 内核的设计假设用户程序将遵守而不是违反此模式。

关于linux - 抑制 fork 命令被杀死的通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/714855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com