2013-06-28 2 views
0

Как описано here, используя фильтры seccomp, мы можем блокировать определенные системные вызовы при запуске файла example.c.Подавление сообщения «Плохой системный вызов»

Процесс прекращается, и сообщение «Bad системного вызова» будет напечатано:

$ ./example 
Bad system call 

Я хочу, чтобы подавить сообщение.

Даже это не помогло:

+0

Попробуйте './example &>/dev/null' –

+0

@DavidRF Не работает. Тот же результат. – Random

ответ

3

Первый шаг - понять, откуда приходит сообщение Bad system call. Это особенность вашей оболочки, чтобы рассказать вам, какой сигнал заставил ваш процесс умереть. Это сообщение не печатается вашим процессом, а оболочкой. Когда оболочка выполняет программу, она ждет ее завершения с использованием системного вызова waitpid. В параметре status описана причина прекращения, и оболочка оценивает это поле и любезно печатает сообщение. Аналогично, когда вы вручную уничтожаете процесс, запущенный из оболочки с сигналом SIGKILL, эта оболочка будет печатать Killed.

Теперь вы уже поняли, как избавиться от сообщения. Вам нужно перенаправить вывод оболочки, запустив подселочку и перенаправляя ее вывод.

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, то я вряд ли думаю, что это будет регистрироваться с помощью любого метода и, таким образом, будет передано этому другому скрипту. Если вы не выполняете какие-либо операции с использованием экрана или аналогичной команды. – anishsane

+0

Я положил команду в свой скрипт 'tester.sh'. Теперь, когда я запускаю './tester.sh 2>/dev/null', это сообщение не появляется. – Random