0

如此处所述,使用 seccomp 过滤器,我们可以在运行 example.c 文件时阻止特定的系统调用。

该进程将终止并打印“Bad system call”消息:

$ ./example
Bad system call

我想压制消息。

即使这样也无济于事:

$ ./example >/dev/null 2>/dev/null
Bad system call
4

2 回答 2

6

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

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

于 2013-09-13T09:32:13.550 回答
0

首先,你试图忽略一些你不应该忽略的东西。“糟糕的系统调用”似乎是一个严重的失败。

但是,如果您必须忽略它,请尝试:

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

我没有测试过这个,但我已经看到这个工作,当简单的>/dev/null 2>&1时候不起作用。

例如(some-command) >/dev/null 2>/dev/null,如果您使用kill -9此命令,killed则不会打印屏幕上打印的消息。

于 2013-06-28T08:31:45.123 回答