The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"как убить все дочерние процессы"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"как убить все дочерние процессы"  
Сообщение от AITech email on 10-Дек-07, 21:27 
Запускаем скрипт, скрипт пускает чтонить, например игрушку.
Как убить порожденные процессы? Все дерево процессов.

В принципе "один слой" можно убить так:
pkill -P пид_скрипта
Но что если есть "второй слой", третий? Как замочить их всех?

И есть ли какой нибудь системный вызов для этого? Что то типа
bool killthemall(int pid);
=))))

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "как убить все дочерние процессы"  
Сообщение от angra (ok) on 10-Дек-07, 22:22 
>И есть ли какой нибудь системный вызов для этого? Что то типа

А зачем? У вас какие-то странные желания. Если все процессы вменяемые, то посылка TERM(но не KILL) родителському должна привести к схлопыванию всего дерева. Если же по каким-либо причинам корректного завершения по TERM не происходит, то после убийства корневого через KILL все остальные останутся зомбями и init их сам придушит, а если не придушит, то просто грепаем по Zz вывод ps и отдаем KILL всем зомбям. Альтернативно можно конечно написать простенький скрипт, который будет проходить по дереву процессов начиная от какого-то PID и посылать KILL всем потомкам.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "как убить все дочерние процессы"  
Сообщение от AITech email on 10-Дек-07, 23:02 
>>И есть ли какой нибудь системный вызов для этого? Что то типа
>
>А зачем? У вас какие-то странные желания. Если все процессы вменяемые, то
>посылка TERM(но не KILL) родителському должна привести к схлопыванию всего дерева.
>Если же по каким-либо причинам корректного завершения по TERM не происходит,
>то после убийства корневого через KILL все остальные останутся зомбями и
>init их сам придушит, а если не придушит, то просто грепаем
>по Zz вывод ps и отдаем KILL всем зомбям. Альтернативно можно
>конечно написать простенький скрипт, который будет проходить по дереву процессов начиная
>от какого-то PID и посылать KILL всем потомкам.

Должна но не приводит =)
Например в скрипте прописываем запуск популярной игрушки
/usr/games/wormux
запускаем, видим в процессах
PID - PPID - NAME
555 - xxx - bash
556 - 555 - wormux

убиваем kill -s TERM 555, wormux не реагирует, можно играть дальше.

З.Ы. желания нисколько не странные. Пишу клиента для компьютерного зала. Нужно убить одну запущенную игру, при запуске другой.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "как убить все дочерние процессы"  
Сообщение от angra (ok) on 11-Дек-07, 04:56 
>Должна но не приводит =)

Я же сказал при условии вменяемости процессов :)

>З.Ы. желания нисколько не странные. Пишу клиента для компьютерного зала. Нужно убить
>одну запущенную игру, при запуске другой.

напишите простой bash или perl скрипт, который убивает всю ветку. Для поиска всех pid может оказаться полезной pstree. Например
$pstree -p 3654
firefox-bin(3654)-+-{firefox-bin}(3665)
                  |-{firefox-bin}(3666)
                  |-{firefox-bin}(3684)
                  |-{firefox-bin}(3685)
                  |-{firefox-bin}(3747)
                  |-{firefox-bin}(3756)
                  `-{firefox-bin}(3769)
$ pstree -p 3654| perl -ne 'print "$1\n" foreach /\((\d+)\)/g;'
3665
3665
3666
3684
3685
3747
3756
3769
Заменяем print на `kill -9 $1` и все умрет :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "как убить все дочерние процессы"  
Сообщение от AITech email on 11-Дек-07, 22:20 
>[оверквотинг удален]
>$ pstree -p 3654| perl -ne 'print "$1\n" foreach /\((\d+)\)/g;'
>3665
>3665
>3666
>3684
>3685
>3747
>3756
>3769
>Заменяем print на `kill -9 $1` и все умрет :)

СПАСИБО!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "как убить все дочерние процессы"  
Сообщение от angra (ok) on 12-Дек-07, 05:52 
звиняюсь сделал глупейшую ошибку. Надо
perl -ne 'print "$1\n" while /\((\d+)\)/g;'
или
perl -ne 'print "$_\n" foreach /\((\d+)\)/g;'
то есть либо $1+while либо $_+foreach, но не $1+foreach иначе будет ерунда когда несколько процессов в одной строке вывода pstree.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "как убить все дочерние процессы"  
Сообщение от ipmanyak (??) on 11-Дек-07, 22:46 
>[оверквотинг удален]
>Как убить порожденные процессы? Все дерево процессов.
>
>В принципе "один слой" можно убить так:
>pkill -P пид_скрипта
>Но что если есть "второй слой", третий? Как замочить их всех?
>
>И есть ли какой нибудь системный вызов для этого? Что то типа
>
>bool killthemall(int pid);
>=))))

killall  имя_родителя_процесса
не подойдет ?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "как убить все дочерние процессы"  
Сообщение от Keeper email(??) on 12-Дек-07, 09:56 
Программку htop ещё можно попробовать.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру