KillProcessTree ekvivalent v linux?

19 отговора 846 прегледа
#1

KillProcessTree ekvivalent v linux?

Ima li takava komandi4ka? iskam da zatria process sus si4kite mu chid taskove

Отговор
в отговор на toni #2

Теория

След като пратиш sigterm на процес (примерно с kill <pid>) се случва следното: събужда се неговия код, който се занимава със сигнали и в общият случай започва процедурата по преминаването в отвъдното.

Добре написаните софтуери сами се грижат да съобщят на децата си, че хубавото е свършило и повече процесорно време за тях няма. Дори родителят нищо да не направи, обаче, след умирането му детето получава сигнал sighup, който означава, че вече е сирак и по принцип го убива.

Така че в стандартната ситуация няма какво специално да правиш - убиваш родителя и по един или друг начин децата си отиват сами без твоя намеса.

За пълнота обаче трябва да ти кажа, че дали детето ще си отиде или не си е изцяло негово решение. Има процеси, които остават след смъртта на родителя си и така трябва - примерно, демоните. Ако искаш да спреш демон, трябва специално да му кажеш да спре, ако обича (или да го пребиеш с брадвата, ако не се е скрил в ядрото).

Отговор
в отговор на Masklin #3

Re: Теория

тва обяснение просто е брутално

Life is a bitch. And then you die!
Отговор
в отговор на Г.Л.Bълk #4

Re: Теория

Какво говориш, направо изкърти стотина миФки заедно с избиването на рибата посредством динамит и изяждането на асфалта

Отговор
в отговор на Masklin #5

Re: Теория

Много отдавна не съм се занимавал със сигнали, но не мисля, че децата _винаги_ получават SIGHUP. SIGHUP е свързан с прекъсването на контролния терминал на приложението. Ако например даден процес е демон (със всичките там истории със създаване на собствена група и т.н.), контролен терминал не съществува и не мисля, че при убиването му децата му ще получат каквито и да е сигнали -- просто родител ще им стане процеса с идентификатор 1.

Аз обикновено избивам процесите ръчно, като първо убивам родителя и му давам около минута възможност да се справи с децата си :) Иначе може да се напише някакво (сравнително) елементарно скриптче, което да дава списък на всички наследници на даден процес. Ако не се сещате как, питайте :)

Отговор
в отговор на martyr #6

Re: Теория

ai sega masklin obra lavrite ... na moito obesnenie ko mu beshe .. che daze i f nebitieto go prati :-)) taka e to ... nekoi pecheliat lavri s bradva :-))


DrFrancky

Отговор
в отговор на l #7

И аз съм като теб

... с малка разлика във времето за чакане. Нямам нерви да оставям някой си да се мотае цяла минута с последните си желания , така че отпускам 30 сек, след което викам Смърт на процесите

Понеже и аз не бях сигурен в SIGHUP, питах man 7 signal:

SIGHUP 1 Term Hangup detected on controlling terminal or death of controlling process

и простодушно реших, че сигурно controlling == parent.

Не съм дълбал, но мисля, че за целите на питащия това не е от голямо значение.

Oh, yes! But this is not a "President release form". Those are blue

Редактирано от Masklin на

Отговор
в отговор на DrFrancky #8

А ти

лаври виждал ли си? Имаш ли по-добра идея как да ги отсечем от дървото

А твоето обяснение беше от онези, за които предварително се помита, за да не се обърка човек, че е поставено на средата случайно. Хубаво поне, че никой не успя да пусне вентилатора междувременно

Oh, yes! But this is not a "President release form". Those are blue
Отговор
в отговор на Masklin #9

Re: А ти

/*
Имаш ли по-добра идея как да ги отсечем от дървото
*/

man bradva

kuf barbarian si ako ne si chel manual-a na bradvata ?

DrFrancky

Отговор
в отговор на toni #10

Re: KillProcessTree ekvivalent v linux?

pi4ove.. si4ko zvu4i mnou hubavo ama ne pomagate :(
ta na4i v tupia gaden smradliv Win32 si ima komanda (daje q ima konsolna) s koiato se ubiva na momenta procesa i si4kite mu deca. i tolkoz.. zabraviash. takova neshto mi triaa i na mene.. probvah sus razni skript4eta ama ne si e rabota, kurpej.. pak i neshto ne raboti vinagi. a absolutno ne e viarno 4e decata izmirat kato ubiesh bashtata.. ne i ne. ako gi kilvashe shteh li da pitam ? :(

Отговор
в отговор на toni #11

Re: KillProcessTree ekvivalent v linux?

aa.. i ne stava vaprosa za nekav demon a za nai obiknoveno binary

Отговор
в отговор на toni #12

Re: KillProcessTree ekvivalent v linux?

/*
tupia gaden smradliv Win32
*/
vazdurzai se da komentiras nesta koito ne razbiras

DrFrancky

Отговор
в отговор на toni #13

Re: KillProcessTree ekvivalent v linux?

man pkill
man pgrep

DrFrancky

Редактирано от Masklin на

Отговор
в отговор на DrFrancky #14

Re: KillProcessTree ekvivalent v linux?

Хмм, не виждам pgrep да има опция да показва всички наследници на процес, не само преките. Има ли такава?

Отговор
в отговор на l #15

Re: KillProcessTree ekvivalent v linux?

Za momenta edinstvenia variant na koito sum se sprial e
pstree -p <PID>
no posle triabva parsvam i da podam na kill :(

Отговор
в отговор на toni #16

Re: KillProcessTree ekvivalent v linux?

Е, и с pgrep може лесно да се напише скриптче, което да дава всички наследници:


function plist {
for i in `pgrep -P $1` ; do
plist $i
echo $i
}


Тази функция връща списък на всички наследници в правилна подредба (т.е. първо децата, след това родителите). Ако искаш да убиеш всички деца на процес 1234, включително и него, kill `plist 1234`.

Отговор
в отговор на l #17

Re: KillProcessTree ekvivalent v linux?

Argh, пропуснал съм един ред с done в края на функцията. Може за всеки случаи i да се дефинира като локално:


function plist {
local i
for i in `pgrep -P $1` ; do
plist $i
echo $i
done
}


Отговор
в отговор на toni #18

Re: KillProcessTree ekvivalent v linux?

отбор специалисти... едните пишат, че се късат - да видят останалите колко (не) са вътрешни със сигнали в линукс, другите цели скриптове разписали... някой дали се замисли поне 5 секунди преди да натисне бутона 'продължи'... туй е риторичен въпрос, пък сега да не тръгне някой да отговаря.

пример с ps afuwx

root 5 0.0 0.0 0 0 ? S< Jun25 0:00 [kthread]
root 7 0.0 0.0 0 0 ? S< Jun25 0:10 \_ [kacpid]
root 99 0.0 0.0 0 0 ? S< Jun25 0:19 \_ [kblockd/0]
root 257 0.0 0.0 0 0 ? S< Jun25 0:00 \_ [aio/0]
root 261 0.0 0.0 0 0 ? S< Jun25 0:00 \_ [xfslogd/0]
root 262 0.0 0.0 0 0 ? S< Jun25 0:00 \_ [xfsdatad/0]
root 565 0.0 0.0 0 0 ? S< Jun25 0:00 \_ [exec-osm/0]
root 571 0.0 0.0 0 0 ? S< Jun25 0:00 \_ [block-osm/0]
root 594 0.0 0.0 0 0 ? S< Jun25 0:00 \_ [kcryptd/0]
root 769 0.0 0.0 0 0 ? S Jul23 0:06 \_ [pdflush]
root 5296 0.0 0.0 0 0 ? S 19:55 0:00 \_ [pdflush]

така може да се види кой е парента и да се изпрати сигнал към него. точно към този надали е много удачно, но това е само пример.

питащият няма да сбърка ако погледне man 7 signal и най-вече POSIX.1 съвместимите:

SIGHUP 1 Term Hangup detected on controlling terminal
or death of controlling process
SIGINT 2 Term Interrupt from keyboard
SIGQUIT 3 Core Quit from keyboard
SIGILL 4 Core Illegal Instruction
SIGABRT 6 Core Abort signal from abort(3)
SIGFPE 8 Core Floating point exception
SIGKILL 9 Term Kill signal
SIGSEGV 11 Core Invalid memory reference
SIGPIPE 13 Term Broken pipe: write to pipe with no readers
SIGALRM 14 Term Timer signal from alarm(2)
SIGTERM 15 Term Termination signal
SIGUSR1 30,10,16 Term User-defined signal 1
SIGUSR2 31,12,17 Term User-defined signal 2
SIGCHLD 20,17,18 Ign Child stopped or terminated
SIGCONT 19,18,25 Continue if stopped
SIGSTOP 17,19,23 Stop Stop process
SIGTSTP 18,20,24 Stop Stop typed at tty
SIGTTIN 21,21,26 Stop tty input for background process
SIGTTOU 22,22,27 Stop tty output for background process

айде

Отговор
в отговор на spunkywabbit #19

Re: KillProcessTree ekvivalent v linux?

Прочети отново въпроса. После си прочети мнението. Дал ли си отговор на въпроса? Ако не си, недей да квалифицираш другите отговорили.

Отговор
в отговор на l #20

Re: KillProcessTree ekvivalent v linux?

mersi, mai tva se svarsi rabota :)

Отговор