2013-06-28 188 views
0

here所述,使用seccomp过滤器,我们可以在运行example.c文件时阻止特定的系统调用。抑制“Bad system call”消息

过程将终止,将印有“坏的系统调用”消息:

$ ./example 
Bad system call 

我想消息打压。

即使这并没有帮助:

+0

尝试'./example&>/dev/null' –

+0

@DavidRF没有工作。同样的结果。 – Random

回答

3

第一步是了解Bad system call消息来自何处。这是你的shell的一个功能,告诉你什么信号导致你的进程死亡。此消息不是由您的进程打印的,而是由您的shell打印的。当shell执行程序时,它会等待它完成使用waitpid系统调用。在status参数中描述了终止的原因,并且shell评估该字段并打印出消息。同样,当您手动终止使用SIGKILL信号从外壳启动的进程时,该外壳将打印Killed

现在你已经想通了如何摆脱消息。您需要通过启动子shell并重定向其输出来重定向shell的输出。

0

首先,您要忽略的东西,你不应该忽视。 “坏系统调用”似乎是一个严重的失败。

但是,如果你要忽略它,尝试:

(./example) >/dev/null 2>/dev/null 

我没有测试过这一点,但我已经看到了这方面的工作,当简单>/dev/null 2>&1不起作用。

例如与(some-command) >/dev/null 2>/dev/null,如果你kill -9这个一些命令,屏幕上打印的killed消息不打印。

+0

没有工作。我需要这样做,因为我的bash脚本打印的所有内容都被另一个脚本使用,我想压制这条消息。现在我认为最好只将想要的消息打印到文件并在第二个脚本中使用该文件。 – Random

+1

如果stdout中没有该消息“Bad system call”,那么我很难想象,这将使用任何方法进行记录,并因此将传递给另一个脚本。除非你正在使用屏幕或类似命令进行一些操作。 – anishsane

+0

我把命令放在脚本'tester.sh'中。现在,当我运行'./tester.sh 2>/dev/null'时,该消息不会出现。 – Random