Я написал программу, которая захватывает пакеты из сетевого интерфейса. Когда он прослушивает сетевой адаптер, мне нужно запустить его с помощью sudo. Вопрос: почему, когда я запускаю его, добавляет ли он два процесса в список процессов?
Примечание: lwdpi - моя программа
Перед исполнением:
[ f1]Список процессов во время выполнения:
ghasemi@ghasemi-MS-7693:~/Desktop/lwdpi_cpp$ ps ax | grep lwdpi
4685 pts/22 S+ 0:00 sudo ./lwdpi -i enp5s0
4686 pts/22 S+ 0:00 ./lwdpi -i enp5s0
4691 pts/21 S+ 0:00 grep --color=auto lwdpi
ghasemi@ghasemi-MS-7693:~/Desktop/lwdpi_cpp$
Как вы видите выше, после выполнения в список процессов добавляются процессы с PID = 4685 и PID = 4686. Зачем? Я не называл свою программу внутри нее!
Это происходит, когда вы начинаете любой процесс с помощью sudo. Один процесс - это программа sudo, а другая - программа, запущенная с помощью sudo, которая является дочерним процессом первого. Программа sudo выйдет только тогда, когда завершится процесс, в котором он запущен (его дочерний элемент). Вот выдержка из моего pstree при запуске sudo apt update
├─mate-terminal─┬
├─bash───sudo───apt
child of bash--^ ^--child of sudo