当前位置:  开发笔记 > 编程语言 > 正文

禁止分叉命令被杀的通知

如何解决《禁止分叉命令被杀的通知》经验,为你挑选了1个好方法。

假设我有一个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



1> lhunath..:

虽然disown可能有消息的副作用 ; 这就是你如何开始这个过程,使消息真正沉默,而不必放弃对过程的工作控制.

{ command & } 2>/dev/null

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

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

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

从BashGuide: http://mywiki.wooledge.org/BashGuide/TheBasics/InputAndOutput#Redirection

说明教程: http://bash-hackers.org/wiki/doku.php/howto/redirection_tutorial

还有一些信息: http://bash-hackers.org/wiki/doku.php/syntax/redirection

顺便说一下; 不要用kill -9.

我也有义务对你的评论:

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

这将使任何UNIX/Linux用户的眼睛充满线索.而且,每次你解析ps,一个仙女死了.做这个:

kill $!

甚至工具pgrep也基本上都被设计破坏了.虽然他们在匹配流程方面做得更好,但基本缺陷仍然存在:

竞争:当您获得PID输出并将其解析回来并将其用于其他内容时,PID可能已经消失,甚至被完全不相关的进程取代.

责任:在UNIX流程模型中,父级负责管理其子级,其他人不应该这样做.父母应该保留孩子的PID,如果它想要发信号,只有父母可以可靠地这样做.UNIX内核的设计假设用户程序将遵循这种模式,而不是违反它.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有