Чому PGID моєї дитини не обробляє PID батьків?


13

Тому я постійно читаю, що ця команда повинна припинити всі дочірні процеси батьківського процесу:

kill -- -$$

Використовуючи негативний ідентифікатор за допомогою команди kill, посилається на PGID, і з наведених нами прикладів здається, що PGID дочірніх процесів повинен бути PID батьків, але це не так у моїй системі.

У моїй системі PGID дитини є таким же, як PGID батьківського сценарію, який виявляється bash.

Що тут відбувається? Чи були приклади помилковими чи моя система налаштована інакше?

Що мені потрібно досягти - це припинити дочірні процеси без припинення батьків, тому я не хочу надсилати сигнал вбивства PGID, в якому знаходиться батьків.

Відповіді:


11

Я думаю, ви маєте на увазі PGID, який означає ідентифікатор групи процесів .

Коли процес розщеплений, він успадковує свій PGID від свого батьківського. PGID змінюється, коли процес стає лідером групи процесів , тоді його PGID копіюється з PID. З цього моменту нова дитина переробляє її нерести, а їхні нащадки успадковують цей PGID (якщо тільки вони не запускають нові власні групи процесів).

У оболонці з контролем роботи, як-от у більшості інтерактивних оболонок, кожне завдання розміщується у власній групі процесів. Якщо ви запустите скрипт оболонки, процес оболонки, що виконує скрипт, буде лідером групи, а PGID дорівнює його PID.

У оболонці без контролю за роботою, як-от більшість оболонок, які використовуються для запуску сценаріїв, команди виконуються в групі процесів оболонки.

Синтаксис kill -- -Nвбиває всі процеси в групі з PGID = N. Ви не можете використовувати його з довільним PID, лише PID керівника групи процесів, оскільки це PGID. Це, по суті, як оболонка

kill %jobid

синтаксис працює - він внутрішньо перекладається %jobidна PGID завдання та передає сигнал цьому PGID.

Немає простого способу запустити скрипт у власній групі процесів з іншого сценарію оболонки. Див. Розділ Як встановити групу процесів сценарію оболонки для деяких пропозицій.


Ви говорите, що оболонка з контролем роботи або без неї робить те саме?
TCZ8

1
Ні. Оболонка з контролем роботи запускає нову групу процесів для кожного завдання. Оболонка без контролю роботи не запускає нову групу процесів для кожної роботи, вона запускає їх у власну групу процесів.
Бармар

уау .. я не прочитав це правильно перший раз. Тож я здогадуюсь, що я хочу ввімкнути контроль за роботою? Чи забезпечить це, щоб у дітей був PGID, що відповідає PID батьківського сценарію? Або кожна дитина отримає свій унікальний PGID?
TCZ8

Я знайшов деякі документи в Інтернеті на контрольних робочих місцях, я переживаю це. Дякуємо за вашу допомогу.
TCZ8

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