Как найти 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?

  • Остановка заданий с помощью PID?
  • Как включить случайные PID в Linux?
  • Отправляет SIGKILL в процесс с заменой, который отменит его до убийства?
  • Убейте процесс, начатый execl
  • Что означает «задача mysqld: xxx, заблокированная более чем на 120 секунд»?
  • AIX, почему ps показывает имя процесса между квадратными скобками?
  • Когда я пишу файл pid, я получаю%, почему и что это значит?
  • идентификатор / идентификатор процесса анализа из / proc, идентификаторы потоков
  • 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 - лучшая ОС в мире.