如此处所述,使用 seccomp 过滤器,我们可以在运行 example.c 文件时阻止特定的系统调用。
该进程将终止并打印“Bad system call”消息:
$ ./example
Bad system call
我想压制消息。
即使这样也无济于事:
$ ./example >/dev/null 2>/dev/null
Bad system call
第一步是了解Bad system call
消息的来源。你的 shell 的一个特性是告诉你是什么信号导致你的进程死亡。此消息不是由您的进程打印的,而是由您的 shell 打印的。当 shell 执行一个程序时,它会等待它完成使用waitpid
系统调用。在status
参数中描述了终止的原因,shell 评估该字段并友好地打印一条消息。同样,当您使用信号手动终止从 shell 启动的进程时SIGKILL
,该 shell 将打印Killed
.
现在您已经想出了如何摆脱该消息。您需要通过启动子外壳并重定向其输出来重定向外壳的输出。
首先,你试图忽略一些你不应该忽略的东西。“糟糕的系统调用”似乎是一个严重的失败。
但是,如果您必须忽略它,请尝试:
(./example) >/dev/null 2>/dev/null
我没有测试过这个,但我已经看到这个工作,当简单的>/dev/null 2>&1
时候不起作用。
例如(some-command) >/dev/null 2>/dev/null
,如果您使用kill -9
此命令,killed
则不会打印屏幕上打印的消息。