Как не показать stdout вывод рабочего процесса?

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

enter image description here

Для удаления значка просто вырывают его и добавить, что каждый перешел к нему в меню и перетаскивает его на правую сторону.

4
25.02.2015, 00:06
3 ответа

Позвольте мне дернуть здесь решение @jimmij указывало, с незначительной модификацией.

(gdb) attach <pid>    
... 
(gdb) call open("/dev/null",O_WRONLY)
$1 = 3
(gdb) call dup2($1,fileno(stdout))
$2 = 1
(gdb) call close($1)
...
(gdb) detach
...

Для тех, которые не знакомы с GDB, «Прикрепить» «Call» «Detach» - команды GDB. Получить информацию с помощью «Справка присоединить» в подсказке GDB. И «Открыть» «DUP2» «Закрыть» - это библиотечные функции. Получить информацию с «Man 2 Open».

Здесь O_Wronly равен 1 и FileNO (STDOUT) равняется 1. Используйте буквальные значения или GDB могут жаловаться на отсутствие символов.


И если мы хотим найти файловый дескриптор уже открытый, мы можем.

$ cd /proc/<pid>/fd
$ for i in * ; do
          if [[ `readlink $i` == "/dev/null" ]]
                  fd=$i ; break
          fi
  done
1
27.01.2020, 20:55

Один из подходов может заключаться в подключении отладчика к процессу и открытии stdout на /dev/null:

gdb --batch -ex 'call close(1)' -ex 'call open("/dev/null",2)' -p "$pid"
4
27.01.2020, 20:55

Следующее предотвратит нормальную доходность, а также сообщения об ошибках

2&>1 >/dev/null
-1
27.01.2020, 20:55

Теги

Похожие вопросы