Как найти PID цикла while?

Я запускаю эту команду в терминале Bash

while [ 0 ]; do i=1; echo $i; done 

Перед запуском этого цикла на другой вкладке gnome-terminal я сделал

 $ps aux | wc -l 192 

Пока цикл все еще работает, я снова сделал

 $ps aux | wc -l 192 

Мои вопросы –

  1. Почему цикл while не получает PID?

  2. Как получить PID отдельных команд, выполняемых внутри цикла while?

  • Какой из следующих кодов будет работать в том же процессе текущей оболочки
  • Мониторинг изменений в использовании swap в режиме реального времени (за каждый процесс)
  • Выполнить команду Nohup с помощью ввода
  • Почему мой единственный экземпляр VLC имеет много процессов?
  • Что происходит с фоновыми заданиями после выхода из оболочки?
  • Есть ли способ узнать, прослушивает ли процесс прослушивание через порт TCP сообщение?
  • Хорошие и дочерние процессы
  • Почему командный игрок снова начинается после того, как его убили
  • 2 Solutions collect form web for “Как найти PID цикла while?”

    1. while он не получает свой собственный PID, потому что это ключевое слово оболочки, а не внешняя команда. Вы получите PID, указанный в качестве процесса bash . Чтобы получить PID, вставьте echo $$ внутри цикла while и используйте ps aux | grep '[b]ash' ps aux | grep '[b]ash' чтобы соответствовать PID.

    2. Если какая-либо команда не является встроенной оболочкой, вы можете получить PID обычным способом, например, используя ps , pgrep . В поле идентификатора PPID (Parent Process ID) вы обычно увидите PID оболочки, в котором он запущен.

      Например. чтобы получить информацию о команде foobar внутри цикла оболочки, вы можете:

       ps -ef | grep '[f]oobar' 

      или

       ps aux | grep '[f]oobar' 

      или pgrep :

       pgrep 'foobar' 

      Поскольку будет запущено более одного процесса оболочки, вы должны пойти на подробность и проверить поле PPID в соответствии с PID оболочки.

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

    while и echo – встроенные команды оболочки bash – они не получают отдельный PID. Попробуйте добавить команду sleep 1 в список команд. Затем вы увидите новую команду в ps .

    Linux и Unix - лучшая ОС в мире.