В первом примере оболочка с PID 100648 — это ваша интерактивная оболочка, а sleep
— фактически процесс, заменивший процесс bash -c ''
. Системный вызовexecve()
порождает новую программу, которая сохраняет PID исходного процесса, вызвавшего ее, поэтому вы не видите здесь исходный bash -c ''
. Простая причина, по которой простые команды заменяют процесс оболочки, заключается в том, что он экономит ресурсы, как объяснено в ответе Стефана .
Это также видно из простого теста в одном терминале:
$ echo $$
10250
$ bash -c 'sleep 60'
И в другом:
$ pstree -p 10250
bash(10250)───sleep(21031)
Что касается того, почему это происходит именно так, то это потому, что есть простая команда без конвейеров, иbash
выполняет прямое выполнение для простых команд .
Именно по этой причине bash
распознает, что у вас есть несколько операторов команд во втором примере, следовательно, для каждой sleep
команды, которую вы имеете в "sleep 10000; sleep 99999 "
. В первом случае execve()
может просто заменить родительский процесс, и когда новый завершится -, проблем не возникнет. Но здесь оболочка не может выйти после завершения первой команды. Следовательно, будет fork и execve для sleep 10000
, что вы видите в выводе pstree
, а затем новый fork и execve для sleep 99999
.
Еще один тест, который вы можете выполнить, чтобы поверить, что простая команда в bash -c ''
заменяет процесс оболочки, это:
$ bash -c 'grep "^Pid:" /proc/self/status /proc/$$/status'
/proc/self/status:Pid: 23946
/proc/23946/status:Pid: 23946
Обратите внимание, что такое поведение -специфично для bash. Для /bin/dash
в дистрибутивах на основе Debian -(, а также очевидно в strace
,тоже):
$ sh -c 'grep "^Pid:" /proc/self/status /proc/$$/status'
/proc/self/status:Pid: 24188
/proc/24187/status:Pid: 24187
Даже если я установил build-essential
, некоторые файлы отсутствовали.
Установка linux-headers-4.19.0-16-amd64
решила мою проблему!
После запуска $ apt install linux-headers-4.19.0-16-amd64
мне удалось установить драйвер и настроить интерфейс.
Если у вас возникла та же проблема, вам необходимо настроить версию ядра в пакете
ОБНОВЛЕНИЕ (ПВЕ)
Установка pve включает новое ядро.
Чтобы восстановить сетевой драйвер, мне пришлось установитьpve-headers