PID фонового завдання відрізняється від переліченого PID завдання з використанням ps


1

Примітка. Я перемістив це на переповнення стека, я думаю, що це правильне місце: тут

У мене є дивне питання, я не можу цілком опустити голову. Що я роблю, це запускати функцію під назвою fn_rundumper, яка в основному просто називає код bash: 'pterm -z "cmd.sh" param1 & "

Ось результат цього, який включає фоновий під "27938858":

fn_rundumper
running fn_dumper...
[1] 27938858
fn_dumper...done

Потім я дивлюся на номери завдань, які виконуються. Це також показує PID "27938858":

jobs -l
[1] + 27938858 Running              $(pterm -z "$SCRIPTS_DIR/run_dumper.sh" $VO

Потім я виконую команду ps, щоб побачити, які pterms виконуються:

ps | grep pterm
 24285189 ?        00:00:00 pterm
 27938859 ?        00:00:00 pterm

Це дає PID "27938859". Це відрізняється від інших!

Коли я вбиваю PID 27938858, здається, нічого не відбувається. Коли я вбиваю PID 27938859, тоді pterm фону закритий.

Проблема полягає в тому, що я, можливо, захочу запускати багато різних фонових pterms, а також деякі pterms, які не відкриваються як фонові завдання (тобто виконуються окремо). Тож, коли я приходжу в порядок, я просто хочу закрити те, що було відкрито за моїм сценарієм.

Я намагався використовувати завдання -l, щоб побачити PID, які мені потрібно закрити, але, як я щойно описав, це неправильний PID.

Хтось може пояснити, чому це відбувається? а також що мені потрібно зробити, щоб отримати правильний PID? Дякую!

- редагувати - Найкраще, що я можу придумати, - це зробити 'ps | grep pterm 'до і після і порівняйте результати, щоб знайти новий Pterm PID ... робити, але некрасиво :(

Відповіді:


2

Що відбувається, це те, що ви створюєте два процеси, перший - це функція fn_rundumper, а другий - це ptermвідкритий вашою функцією. Таким чином, ваш виклик функції приймає pid, що закінчується 858, а ptermвиклик з вашої функції приймає pid наступний після нього, що закінчується 859.

Що стосується pid першого pterm, це термінал, який ви використовували для виконання своєї функції. Ось чому вбивство вбиває все створене в ньому (доки ви не використовуєте nohupкоманду).

Щоб побачити той самий pid в psкоманді, спробуйте:, ps | grep run_dumper.shякий є pid скрипту bash, який виконує вашу fn_rundumperфункцію.


Привіт Linostar, це не дуже спрацювало, я не думаю, що запуск його з функції не має жодного ефекту. Але це вказувало мені на важливий напрямок. Я знову перевірив це все в командному рядку (без виклику функції). Коли я використовую зворотний галочку навколо функції, вона має таку саму поведінку. Якщо я не ставлю зворотну галочку навколо функції, то PID-адреси все правильно! тобто: " pterm -z "$VOE_SCRIPTS_DIR/run_dumper.sh" $PROJECT_DIR&" стає: "pterm -z" $ VOE_SCRIPTS_DIR / run_dumper.sh "$ PROJECT_DIR &" .... тому задній галочок повинен додавати рівень PID. Також вибачте, я перемістив це в переповнення стека, дивіться посилання
code_fodder

Але +1 для цього вказівника
:)

Чи використовували ви зворотні посилання? Так, зворотні посилання створять окремий процес, як ви вже вивели. Радий, що зможе трохи допомогти.
Ліностар

Так, я був! - Я лише здогадався, що відбувається, але це дивна поведінка. Ваші записки привели мене туди, куди я хотів піти спасибі!
code_fodder
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.