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