Вы можете использовать
sudo kill "$!"
, чтобы завершить последнее запущенное фоновое задание.
Было бы еще проще, если бы вы начали работу с
sudo tcpdump... & pid="$!"
, затем
sudo kill "$pid"
убьет конкретную работу.
Сам процесс sudo
работает от вашего имени, но он будет передавать все сигналы дочернему процессу(tcpdump
в данном случае ), что означает, что вы должны иметь соответствующие разрешения, чтобы сигнализировать ему, чтобы иметь возможность убей это.
Из руководства sudo
(по системе Ubuntu):
If an I/O logging plugin is configured or if the security policy explicitly requests it, a new pseudo-terminal (“pty”) is created and a second sudo process is used to relay job control signals between the user's existing pty and the new pty the command is being run in. This extra process makes it possible to, for example, suspend and resume the command.
[...]
When the command is run as a child of the sudo process, sudo will relay signals it receives to the command. The SIGINT and SIGQUIT signals are only relayed when the command is being run in a new pty or when the signal was sent by a user process, not the kernel.
cd
не является двоичным файлом, это встроенная оболочка, поэтому sudo
совершенно правильно говорит, что не может его найти. Кроме того, даже если у вас есть двоичный файл, который изменил ваш рабочий каталог, вы вернетесь туда, откуда начали, когда он вышел из sudo
.
Если вы хотите сменить каталог на /root
и остаться там, вам нужна оболочка с правильным UID, поэтому ваши sudo su
иcd /root
(или даже простоcd
)работают так, как вы ожидаете.
Между прочим, sudo su
избыточно. sudo
уже может дать вам все необходимое с опциями -i
или -s
.