Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: obla4e в Jul 22, 2005, 13:11



Титла: KillProcessTree ekvivalent v linux?
Публикувано от: obla4e в Jul 22, 2005, 13:11
Ima li takava komandi4ka? iskam da zatria process


Титла: KillProcessTree ekvivalent v linux?
Публикувано от: в Jul 22, 2005, 14:16
Цитат (obla4e @ Юли 22 2005,14:11)
Ima li takava komandi4ka? iskam da zatria process

ps?!
top?!


Титла: KillProcessTree ekvivalent v linux?
Публикувано от: obla4e в Jul 22, 2005, 18:50
ama az iskam da zatria i si4kite mu de4urliga :p


Титла: KillProcessTree ekvivalent v linux?
Публикувано от: anger в Jul 22, 2005, 20:19
ps axjf


Титла: KillProcessTree ekvivalent v linux?
Публикувано от: в Jul 22, 2005, 22:18
Най-лесно става от конзола. Разгледай:

man ps

man kill

Аз лично използвам:

ps -A
kill <pid> ;-)

Обикновенно се получава. А с дечурлигата ... май като затриеш първичния процес останалите се махат сами ;-) Но това е само моя теория. Първичен - с най-малкия номер.


Титла: KillProcessTree ekvivalent v linux?
Публикувано от: vic_semionov в Jul 23, 2005, 11:31
Готина идея, на мене не ми беше хрумвало и се позамислих... но най-доброто до което се докопах е да се затрият всички деца на даден процес (но не и техните деца, нито главния процес):

pkill -P <pid>

При това не знам дали го има в Linux, щото аз съм с FreeBSD. Но тоя вапрос ме интересува и мене и ся ша са поразровя в google.


Титла: KillProcessTree ekvivalent v linux?
Публикувано от: в Jul 23, 2005, 12:02
Цитат (vic_semionov @ Юли 23 2005,12:31)
... но най-доброто до което се докопах е да се затрият всички деца на даден процес (но не и техните деца, нито главния процес)...

Така няма ли риск пак да се повтори грешката довела до зацикляне на процеса?


Титла: KillProcessTree ekvivalent v linux?
Публикувано от: vic_semionov в Jul 23, 2005, 12:32
Цитат (Guest @ Юли 23 2005,13:02)
Цитат (vic_semionov @ Юли 23 2005,12:31)
... но най-доброто до което се докопах е да се затрият всички деца на даден процес (но не и техните деца, нито главния процес)...

Така няма ли риск пак да се повтори грешката довела до зацикляне на процеса?

За какво зацикляне става въпрос? Просто се търси начин да се убият даден процес и всичките му деца и техните деца и тн. А дали е зациклил и по каква причина е друг въпрос. Ако убиването му ще доведе до проблеми, не го прави, но понякога се налага :)

Аз се усъмних в твоята теория че убиването на родителя убива и децата и го пробвах. Оказа се вярно, поне в някои случаи, но не мисля че винаги е така. Това е още едно нещо което трябва да проверя.


Титла: KillProcessTree ekvivalent v linux?
Публикувано от: в Jul 23, 2005, 13:38
За друго питам. Като оставиш главния процес, но спреш само подпроцесите (убиване на деца звучи малко ... ;) ) дали тогава няма риск. Прост пример:

1. Пускам xine (да гледам някой филм) и по неведоми причини той вземе, че забие.
2. Опитвам се да kill-вам процеса, но поради това, че не съм видял някой по-нагоре (първичния), се опитвам да махна някой подпроцес и естествено когато се опитам да стартирам пак xine той не тръгва.
3. Спирам главния процес и след това нямам проблеми да пусна програмката.

Може би грешката идва от това, че използвам

ps -A

и там не ми указва кое е подпроцес и кое не (или аз не съм видял къде го прави).


Титла: KillProcessTree ekvivalent v linux?
Публикувано от: vic_semionov в Jul 23, 2005, 15:10
Ако под подпроцес имаш предвид нишка (thread на англииски), не може отвън да се спре само един подпроцес, или цялата съвкупност от нишки (целия процес), или нищо.

Може би объркването идва от там, че в Линукс ако един процес се състои от две нишки, ps ти ги показва и двете, при това с различни PID и може да помислиш че процесите са два. Абе сбъркана работа :)

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


Титла: KillProcessTree ekvivalent v linux?
Публикувано от: sdr в Jul 23, 2005, 16:09
Нямаше ли някъде няква заповед - "не убивай?" от тва нямаше ли следствие "ако не можеш да го спреш културно - по-добре не го ползвай"??

може и аз да съм в грешка..


Титла: KillProcessTree ekvivalent v linux?
Публикувано от: rpetrov в Jul 23, 2005, 16:11
Няма гаранция, че прекъсването на родителски процес спира 'подпроцесите'. Например при команда:
Примерен код
bash -c 'sleep 101 & sleep 101' &

, ако се спре bash си остават два процеса sleep.

Обработването на изхода от команди като ps, pstee е несигурно, защото дават снимка на текущите връзки.

Ако се иска няколко процеса да се прекъснат заедно, може би най-добре е да се поставят е една и съща "група от процеси". Тогава с програмата (!) /bin/kill -s TERM -pgid се изпраща сигнал (TERM в случая) на всичките процеси в група pgid.
Виж kill(1), kill(2), wait(2) ... (?) .

Бел.: Има разлика между /bin/kill и kill. Някой  командни интерпретатори имат вградена команда kill, чиито аргументи най-вероятно се различават от тези на програмата kill.


Титла: KillProcessTree ekvivalent v linux?
Публикувано от: VladSun в Jul 24, 2005, 11:59
man killall

Примерен код
-g, --process-group
              Kill the process group to which the process belongs. The kill signal is only sent once  per  group,
              even if multiple processes belonging to the same process group were found.



Не знам дали е това, което си мисля, че е ;) ама разгледай го :)


Титла: KillProcessTree ekvivalent v linux?
Публикувано от: Italianeca в Jul 24, 2005, 12:10
Има програма която се нарича QPS Много полезна но я няма в повечето дистрибуции (В дебиан естествено я има). Тя ти показва процесите като дърво. И естестено можеш да селектираш каквото искаш да убиеш. За Гноме gnome-system-montor а за КДЕ нещо като Crash guard но не съм сигурен.

Поздрави


Титла: KillProcessTree ekvivalent v linux?
Публикувано от: в Jul 24, 2005, 15:21
Цитат (Italianeca @ Юли 24 2005,13:10)
Има програма която се нарича QPS Много полезна но я няма в повечето дистрибуции (В дебиан естествено я има). Тя ти показва процесите като дърво. И естестено можеш да селектираш каквото искаш да убиеш. За Гноме gnome-system-montor а за КДЕ нещо като Crash guard но не съм сигурен.

Поздрави

pstree - display a tree of processes.

[nick@fuji ~]$ pstree

init&#9472;&#9516;&#9472;acpid
     &#9500;&#9472;artsd
     &#9500;&#9472;atd
     &#9500;&#9472;auditd
     &#9500;&#9472;2*[automount]
     &#9500;&#9472;bonobo-activati
     &#9500;&#9472;cardmgr
     &#9500;&#9472;crond
     &#9500;&#9472;cups-config-dae
     &#9500;&#9472;cupsd

QPS прилича ли на нея?
защото мисля, че pstree е стандартна програма, която влиза във всяка дистрибуция (но само го мисля -- не съм го проверявал).


Титла: KillProcessTree ekvivalent v linux?
Публикувано от: в Aug 09, 2005, 14:04
По принцип за убиване на всички деца и родителски процес заедно се изпозва killall (поне аз това ползвам).По такъв начин се убиват всички процеси заедно с родителския, децата, и някой други които системата създава сама. По принцип когато стартирате нещо системата създава още минимум 2-3 допълнителни процеса с същото име които изпълняват обслужващи услуги на стартираният процес.
С killall се убива абсолютно всичко.


Титла: KillProcessTree ekvivalent v linux?
Публикувано от: Hapkoc в Aug 09, 2005, 14:23
Това е много интересно.

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

Редакция: с killall се убива процес по зададено име. Какво ще стане ако имаш някой cron job, който е скрипт на perl и в това време решиш да убиеш друг perl скрипт, например така: killall /usr/bin/perl?