Linux: Перегляд і вбивство відстороненого процесу


4

Я запустив програму в Linux за допомогою &і disown.
Я хотів би побачити, чи все ще він працює і, можливо, його вбити.

Я запустив процес такими командами:

(env)bash-4.2$ python manage.py update_rollups &

[1] 29144

(env)bash-4.2$ disown

Я більше не можу його знайти і ps auxне вбивати його на основі піда 29144.
Хочу знати, чи процес все ще працює (під init?).

Сподіваюся, ви зможете допомогти!


Ласкаво просимо на Super User. Дайте відгуки відповідачам, пам’ятайте, що ви можете редагувати власне запитання, заявляти відгуки, відхиляти відповіді та вибирати одну з них, якщо ви думаєте, що це вирішує ваше питання.
Hastur

Відповіді:


4

Коротко

З &і disownви не змінюєте PID [ 1 ] процесу.
Якщо ви не бачите його у ps -p <YOURPID>висновку, він більше не працює.
Ви можете перевірити це за допомогою додаткового echo $? [ 2 ] після команди ps(або kill), перевіривши, чи програма виходить із кодом виходу, відмінним від 0(як правило 1).

Розуміння ваших команд.

  • Фон : коли ви запускаєте команду з фіналом, &ви надсилаєте її у фоновому режимі.
    Це означає що:

    • Він присутній у списку завдань вашої оболонки (у вашому прикладі - номер, [1]і ви можете посилатися на нього як %1; (спробуйте команду jobs).
    • Ви можете вивести його на передній план і на фоні з fgі bg.
    • Вона (досі) "належить" оболонці (пов'язаної з батьківською) оболонкою: якщо оболонка отримує SIGHUPсигнал, вона також надсилає SIGHUPсигнал і в процес.

      $ sleep 1h &
      [1] 10795
      $ jobs
      [1]+  running           sleep 1h & 
      $ ps -l -p 10795       
      F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
      0 S  1000 10795  8380  0  80   0 -  3107 hrtime pts/57   00:00:00 sleep
      
  • Disown : за допомогою команди disownви видалите завдання зі списку завдань оболонки, але ви не змінюєте його PID.

    $ disown
    $ jobs
          # <---- No jobs
    $ ps -l -p 10795
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    0 S  1000 10795  8380  0  80   0 -  3107 hrtime pts/57   00:00:00 
    

    Зверніть увагу на той самий PPID (оболонка все ще існує).
    Тепер ми вбиваємо снаряд.

    $ kill 8380   # Here we kill the shell 
    $ ps -l -p 10795
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    0 S  1000 10795  5339  0  80   0 -  3107 hrtime pts/57   00:00:00 sleep
    

    Існує ще один PPID, то 5339, що з іншим викликом ps, ps -p 5339ви відкриєте для себе , щоб бути initприкладом:

    $ ps -p 5339
    PID TTY          TIME CMD
    5339 ?        00:02:20 init
    

pstree: більш швидкий шлях.

Ви можете бачити pstreeшвидше.

Перед командами disownта вбийте баш команди:

$ pstree -s -p 10795 
init(1)───lightdm(1199)───lightdm(5259)───bash(8380)───sleep(10795)

Після disownі вбийте баш :

$ pstree -s -p 10795 
init(1)───lightdm(1199)───lightdm(5259)───init(5339)───sleep(10795)

Примітка: звичайно, всі PID-адреси у вашому випадку будуть різними ...


3

Якщо його немає ps auxf, значить, він не працює. Якщо ви запустите kill 29144і отримаєте "Немає такого процесу", це також означає, що процес не працює.


Хм, я не бачу процесу з ps auxf, чи його можна було б заховати в одному з них? WEB0117 32409 0,3 0,2 583004 39360? Sl 12:49 0:01 _ WEB0117 -k початок (WEB0117 - це користувач, який я
працюю

2

Кожен процес має папку у /procфайловій системі з ним pid. Якщо папки не існує, процес не працює.

Наприклад

/proc/29144/

ви можете переглянути процес commandline

cat /proc/29144/cmdline

Приклад виведення:

/usr/sbin/smbd

або перевірити стан файлу процесу

stat /proc/29144/exe

Приклад виведення:

File: /proc/29144/exe -> /usr/sbin/smbd
  Size: 0               Blocks: 0          IO Block: 1024   symbolic link
Device: 3h/3d   Inode: 78497       Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-04-07 12:18:01.719011505 +0200
Modify: 2017-04-07 12:18:01.369010535 +0200
Change: 2017-04-07 12:18:01.369010535 +0200
 Birth: -
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.