ps не показывает все процессы

(( dirct=$(echo ${dir}|tr "/" " "|wc -w)+1 ))
i=2
while [ ${i} -le ${dirct} ]
do
  sdir=$(echo ${dir}|cut -d/ -f1,${i})
  if [ ! -d ${sdir} ]
  then
    echo "Path is broken at ${sdir}"
  fi
  (( i++ ))
done

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

Caveat emptor: если имя вашего каталога на любом уровне содержит символ пробел , это НЕ будет работать.

5
18.12.2018, 20:12
1 ответ

С вашим терминалом и оболочкой все в порядке. По умолчанию psпоказывает процессы с тем же эффективным идентификатором пользователя, что и пользователь, выполняющий их, и связанные с тем же терминалом. Обычно это приводит к тому, что только два процесса отображают :текущую оболочку и саму ps. Если с текущим терминалом связаны какие-либо фоновые процессы, они также будут отображаться; вы можете увидеть это, запустив

sleep 120 &
ps

Чтобы увидеть все процессы, запустите

ps -e

Существует ряд других флагов выбора процесса, подробности см. в man psв вашей системе.

Когда вы запускаете script, он выделяет новый терминал и запускает новую оболочку; поэтому psвнутри scriptработает на другом терминале (, даже если он находится в том же окне терминала в вашей системе или на той же виртуальной консоли ). Вот почему вы не видите script. Вы можете увидеть, как это происходит, запустив ttyдо и после запуска script:, вы увидите два разных значения.

См. также В чем разница между «терминалом», «оболочкой», «tty» и «консолью»?

11
27.01.2020, 20:38

Теги

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