如何屏蔽kill输出

发布于 2024-12-14 19:27:09 字数 222 浏览 0 评论 0原文

我运行如下脚本:

sleep 20 &
PID=$!
kill -9 $PID >/dev/null 2>&1

我不希望脚本显示如下输出:

line 51: 22943 Killed  sleep

我不知道为什么会发生这种情况,我已将输出重定向到 /dev/null

I run a script like:

sleep 20 &
PID=$!
kill -9 $PID >/dev/null 2>&1

I dont want the script show the output like:

line 51: 22943 Killed  sleep

I have no idea why this happen, I have redirect the output to /dev/null

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

心凉怎暖 2024-12-21 19:27:09

该消息不是来自 kill 或后台命令,而是来自 bash,当它发现其后台作业之一已被终止时。要避免出现该消息,请使用 disown 将其从 bash 的作业控制中删除:

sleep 20 &
PID=$!
disown $PID
kill -9 $PID

The message isn't coming from either kill or the background command, it's coming from bash when it discovers that one of its background jobs has been killed. To avoid the message, use disown to remove it from bash's job control:

sleep 20 &
PID=$!
disown $PID
kill -9 $PID
中二柚 2024-12-21 19:27:09

这可以使用“wait”+将 wait 重定向到 /dev/null 来完成:

sleep 2 &
PID=$!
kill -9 $PID
wait $PID 2>/dev/null
sleep 2
sleep 2
sleep 2

此脚本不会给出“killed”消息:

-bash-4.1$ ./test
-bash-4.1$ 

同时,如果您尝试使用类似的内容:

sleep 2 &
PID=$!
kill -9 $PID 2>/dev/null
sleep 2
sleep 2
sleep 2

它将输出消息:

-bash-4.1$ ./test
./test: line 4:  5520 Killed                  sleep 2
-bash-4.1$

我非常喜欢这个解决方案不仅仅是使用“否认”,这可能会产生其他影响。

想法来源:https://stackoverflow.com/a/5722850/1208218

This can be done using 'wait' + redirection of wait to /dev/null :

sleep 2 &
PID=$!
kill -9 $PID
wait $PID 2>/dev/null
sleep 2
sleep 2
sleep 2

This script will not give the "killed" message:

-bash-4.1$ ./test
-bash-4.1$ 

While, if you try to use something like:

sleep 2 &
PID=$!
kill -9 $PID 2>/dev/null
sleep 2
sleep 2
sleep 2

It will output the message:

-bash-4.1$ ./test
./test: line 4:  5520 Killed                  sleep 2
-bash-4.1$

I like this solution much more than using 'disown' which may have other implications.

Idea source: https://stackoverflow.com/a/5722850/1208218

一场春暖 2024-12-21 19:27:09

禁用作业通知的另一种方法是将命令置于 sh -c 'cmd &' 构造中后台。

#!/bin/bash

# ...

sh -c '
sleep 20 &
PID=$!
kill -9 $PID # >/dev/null 2>&1
'

# ...

Another way to disable job notifications is to put your command to be backgrounded in a sh -c 'cmd &' construct.

#!/bin/bash

# ...

sh -c '
sleep 20 &
PID=$!
kill -9 $PID # >/dev/null 2>&1
'

# ...
ι不睡觉的鱼゛ 2024-12-21 19:27:09

我能够通过重定向在后台运行的命令的输出来完成此任务。在您的情况下,它看起来像:

sleep 20 >>${LOG_FILE} 2>&1 &

...或者如果您不需要日志文件:

sleep 20 &> /dev/null &

然后,当您想要终止该后台进程的 PID 时,它不会显示在标准输出上。

I was able to accomplish this by redirecting the output of the command that I am running in the background. In your case it would look like:

sleep 20 >>${LOG_FILE} 2>&1 &

... or if you do not want a log file:

sleep 20 &> /dev/null &

Then, when you want to kill that background process' PID, it will not show on standard out.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文