Toon posts:

processen killen

Pagina: 1
Acties:
  • 117 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Weet er iemand hoe ik onder unix (solaris 7) alle processen van een user kan killen op snelle manier (het zijn er heeeel veel, door loop in loginscript hele procesbuffer vol Tcsh opgestart)

Verwijderd

killall -9 naam

aangezien het allemaal dezelfde processen zijn moet dat werken

Verwijderd

Topicstarter
Ik heb even in de man pages gekeken van solaris en killall kills ALL running processes. Killall kan ook alleen door de superuser gebruikt worden dus ik stop daarmee waarschijnlijk ALLE lopende processen wat zeker niet de bedoeling is. Bedoeling is om enkel alle processen op mijn naam te killen.
Is dit niet mogelijk ? Daar moet toch wel iets voor bestaan.

  • Asphyxion
  • Registratie: November 1999
  • Laatst online: 00:11

Asphyxion

I am, therefor I think

Vast een 1 of ander shellscriptje die dat wel kan...

http://www.shelldorado.com

Anders zelf even schrijven :)

  • BallisticToilet
  • Registratie: Oktober 2001
  • Laatst online: 27-09-2022
Zo kan het ook:

kill -9 `ps -ef|grep <user>|grep -v grep|nawk {'print $2'}`

Let op de backquotes.

Verwijderd

Je moet wel een beetje oppassen met een -9 signaal. Sommige programma's die door meerdere gebruikers gebruikt worden(bijvoorbeeld databases) hebben de neiging om te crashen als je een gebruikers proces hard afschiet. Hierbij kan dan corruptie optreden van de database. Het beste kun je dus eerst een kill zonder signaal gebruiken.

-Desecrator

  • BallisticToilet
  • Registratie: Oktober 2001
  • Laatst online: 27-09-2022
Een kill -15 is nog netter.

Verwijderd

Op woensdag 17 oktober 2001 18:13 schreef BallisticToilet het volgende:
Een kill -15 is nog netter.
Zonder vlag is gelijk aan -15:

man kill
...

-signal_number
A non-negative decimal integer specifying the signal to be sent instead of the default SIGTERM

...

Some of the more commonly used signals:

...

15 TERM (software termination signal)
-Desecrator

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 14:36

odysseus

Debian GNU/Linux Sid

Op woensdag 17 oktober 2001 18:02 schreef BallisticToilet het volgende:
kill -9 `ps -ef|grep <user>|grep -v grep|nawk {'print $2'}`
Ik zou wel die 'grep -v grep' weghalen. Als die grep van jezelf is (en dat bedoel je hier, neem ik aan), dan zie ik niet in waarom je in hemelsnaam al je eigen processen gaat zitten killen, dan ben je je eigen bash kwijt en zo...Als die processen van iemand anders zijn (waarschijnlijk wel dus) dan moet toch ook die grep gekild worden? Lijkt me wel.

offtopic:
Ik krijg het nooit voor elkaar om backquotes in zijn console te typen. Heb het ook niet dagelijks nodig (gebruik wel een perlscriptje als ik ze nodig heb), maar ze zijn wel handig. Kan iemand even tussendoor vermelden hoe je dat doet, ondanks dat ik nog geen RTFM en UTFS en dergelijke gebruikt heb? Bij voorbaat dank ;)

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


Verwijderd

Op woensdag 17 oktober 2001 20:17 schreef odysseus het volgende:

[..]

Ik zou wel die 'grep -v grep' weghalen. Als die grep van jezelf is (en dat bedoel je hier, neem ik aan), dan zie ik niet in waarom je in hemelsnaam al je eigen processen gaat zitten killen,
Die grep -v is juist wel nodig. Als je "ps aux | grep iets" doet dan zal die grep zelf ook te voorschijn komen. In de proces tabel staat namelijk "grep iets" Met die "grep -v grep" filter je de regel met grep er weer uit. Hiermee voorkom je dus dat je op een proces gaat schieten dat op dat moment niet meer bestaat. Als je pech hebt (erg volle proces tabel) is er zelfs een nieuw proces onstaan met hetzelfde PID als die van de grep. Je schiet dan een proces af dat je niet wil afschieten.

-Desecrator

  • igmar
  • Registratie: April 2000
  • Laatst online: 29-06 18:56

igmar

ISO20022

Op woensdag 17 oktober 2001 15:46 schreef spock13 het volgende:
killall -9 naam

aangezien het allemaal dezelfde processen zijn moet dat werken
Dan kun je op die solaris box net zo goed de resetknop indrukken. killall schiet namelijk alles af, de naam parameter kent ie niet.

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 14:36

odysseus

Debian GNU/Linux Sid

Op woensdag 17 oktober 2001 20:26 schreef Desecrator het volgende:

[..]

Die grep -v is juist wel nodig. Als je "ps aux | grep iets" doet dan zal die grep zelf ook te voorschijn komen. In de proces tabel staat namelijk "grep iets" Met die "grep -v grep" filter je de regel met grep er weer uit.
Nope...je filtert je eigen grep er al uit met die grep <user> die je daarvoor doet, dus dat is helemaal niet meer nodig. Tenzij je natuurlijk al je eigen processen wilt afschieten uitgezonderd je grep, maar iets zegt me dat je dat niet wilt >:)

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


  • wouzer
  • Registratie: Maart 2000
  • Niet online
Kun je niet gewoon de shell van die user afschieten?

Verwijderd

Op woensdag 17 oktober 2001 20:55 schreef odysseus het volgende:

[..]

Nope...je filtert je eigen grep er al uit met die grep <user> die je daarvoor doet, dus dat is helemaal niet meer nodig. Tenzij je natuurlijk al je eigen processen wilt afschieten uitgezonderd je grep, maar iets zegt me dat je dat niet wilt >:)
Die grep kan wel degelijk in je resultaat terecht komen. Ik heb op mijn werk dit zelf ervaren. We hadden het probleem dat soms een backup nog niet afgelopen was, maar dat de volgende tape voor de andere filesets al wel geladen werd.
De lopende backup ging dan keurig onderuit. :(

Ik heb toen het script aangepast met:

AANTAL=`ps -ef | grep backup | wc -l`

Vervolgens deed ik een check op AANTAL. Was deze niet 0 dan liep de andere backup nog en moest hij wachten. Na een eerste run bleef hij roepen dat de andere backup nog liep, ook als hij al afgelopen was. Pas toen ik grep -v grep toevoegde werkte het correct. Dit alles op Tru64 UNIX 4.0F.

De ps en de grep lopen wel degelijk te gelijk, dus is het absoluut mogelijk dat de grep in je resultaat terecht komt.

Uit "The Complete UNIX Desk Reference":
pipeline
A group of commands connected by a pipe. Commands in a pipeline are executed simultaneously, with the output of one command serving as the input for the next.
Heb het hier ook nog even uitgeprobeerd op mijn OpenBSD doos. Hij laat soms wel en soms niet de grep zien in het resultaat. Waarom ik hem op mij eigen blik maar soms zie, is mij niet duidelijk.

-Desecrator

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 23:45

deadinspace

The what goes where now?

Op woensdag 17 oktober 2001 22:34 schreef Desecrator het volgende:
De ps en de grep lopen wel degelijk te gelijk, dus is het absoluut mogelijk dat de grep in je resultaat terecht komt.
Hoewel je (in de meeste implementaties in ieder geval) absoluut gelijk hebt dat de ps en de grep tegelijkertijd draaien, moet je toch nog eens goed lezen wat Odysseus nou precies schreef:
Op woensdag 17 oktober 2001 20:55 schreef odysseus het volgende:
Nope...je filtert je eigen grep er al uit met die grep <user> die je daarvoor doet, dus dat is helemaal niet meer nodig. Tenzij je natuurlijk al je eigen processen wilt afschieten uitgezonderd je grep, maar iets zegt me dat je dat niet wilt >:)

  • Wilke
  • Registratie: December 2000
  • Laatst online: 20:10
Op woensdag 17 oktober 2001 20:55 schreef odysseus het volgende:

[..]

Nope...je filtert je eigen grep er al uit met die grep <user> die je daarvoor doet, dus dat is helemaal niet meer nodig. Tenzij je natuurlijk al je eigen processen wilt afschieten uitgezonderd je grep, maar iets zegt me dat je dat niet wilt >:)
Klopt helemaal. Als je jezelf als user opgeeft waarvan alle processen dood moeten vraag ik me ook af waar je nu helemaal mee bezig bent. Als je een andere user opgeeft (altijd dus), is die grep van jou en niet van die andere user, en dus wordt die al door het commando ervoor weggefilterd.

Dus die grep -v grep kan er echt wel tussenuit!

Verwijderd

Op donderdag 18 oktober 2001 13:33 schreef Wilke het volgende:

[..]

Klopt helemaal. Als je jezelf als user opgeeft waarvan alle processen dood moeten vraag ik me ook af waar je nu helemaal mee bezig bent. Als je een andere user opgeeft (altijd dus), is die grep van jou en niet van die andere user, en dus wordt die al door het commando ervoor weggefilterd.

Dus die grep -v grep kan er echt wel tussenuit!
Even voor de duidelijkheid dat we het allemaal over hetzelfde hebben.

Wij zijn root en willen alle processen van een andere gebruiker afschieten.

We doen ps -ef | grep <user>

ps -ef laat alle processen op het systeem zien. Tegelijker tijd loopt er een grep <user>, die de output ontvangt van ps -ef. Als ps de processen bekijkt ziet hij in de proces tabel een proces lopen dat als commando grep <user> heeft. Deze komt vervolgens in grep terecht. Grep zit op deze regel <user> staan en zal deze regel dus toevoegen aan het resultaat. Het eind resultaat is dus de processen van de gebruiker en de grep <user> van root. Die laatste wil je niet, dus die mik je weg met grep -v "grep <user>"

Nadeel is natuurlijk dat ieder proces waarin ergens <user> voorkomt geschoten gaat worden. Dus bijvoorbeeld ook een mail proces van een andere gebruiker, die toevallig user een mailtje zit te sturen. Je kan dan beter een grep ^user doen, want dan match alleen user aan de begin van de regel en niet user waar dan ook. In dit geval heb je inderdaad niet een grep -v grep nodig. Nog netter zou als hij een ps -efu user zou kunnen gebruiken. Of Solaris 7 de u vlag ondersteund weet ik niet, want ik ben Tru64 admin. Dus even in de man page van ps kijken.

-Desecrator

  • Mx. Alba
  • Registratie: Augustus 2001
  • Laatst online: 22:18

Mx. Alba

hen/hun/die/diens

In Debian zit een utility genaamd slay.

root@voyager[~]# slay chakotay

En alle processen van chakotay worden in één keer om zeep geholpen.

Het is alleen een echte hetze als het uit Hetzerath komt, anders is het gewoon sprankelende ophef.


  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 23:45

deadinspace

The what goes where now?

Op donderdag 18 oktober 2001 15:42 schreef Desecrator het volgende:
ps -ef laat alle processen op het systeem zien. Tegelijker tijd loopt er een grep <user>, die de output ontvangt van ps -ef. Als ps de processen bekijkt ziet hij in de proces tabel een proces lopen dat als commando grep <user> heeft. Deze komt vervolgens in grep terecht.
Inderdaad, dat had ik over het hoofd gezien. Maar het doet er niet toe, want op het moment dat de killall de output van de rest doorgepiped krijgt, draait de grep al niet meer. :P

Verwijderd

Op donderdag 18 oktober 2001 17:07 schreef deadinspace het volgende:

[..]

Inderdaad, dat had ik over het hoofd gezien. Maar het doet er niet toe, want op het moment dat de killall de output van de rest doorgepiped krijgt, draait de grep al niet meer. :P
Om die grep hoef je inderdaad geen zorgen te maken. Of hij draait nog net wel, en dan wordt hij gewoon gekilled. Of hij draait net niet meer en dan krijg je iets als
"kill: no such proces". Als de procestabel echter erg vol is, kun je pech hebben dat dat PID dat grep had, ondertussen toegekend is aan een nieuw proces. Kans dat dit normaal gebeurd is natuurlijk erg klein omdat na het afsluiten van het proces het PID van grep onderaan de freelist zal komen te staan. Als je echter gaat schieten omdat je medelingen krijgt dat de procestabel vol zit, is dit echter wel iets om rekening mee te houden.

Ik geef zelf trouwens de voorkeur aan:

<pipeline> | xargs kill

Uit ervaring weet ik dat als je een lange pipeline hebt met veel quotes erin dat "kill `<pipeline>`" soms niet goed door de shell begrepen wordt.

-Desecrator

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 23:45

deadinspace

The what goes where now?

Op donderdag 18 oktober 2001 17:39 schreef Desecrator het volgende:
Om die grep hoef je inderdaad geen zorgen te maken. Of hij draait nog net wel, en dan wordt hij gewoon gekilled. Of hij draait net niet meer en dan krijg je iets als
"kill: no such proces".
Dat krijg je idd, ik heb het al getest.
Als de procestabel echter erg vol is, kun je pech hebben dat dat PID dat grep had, ondertussen toegekend is aan een nieuw proces. Kans dat dit normaal gebeurd is natuurlijk erg klein omdat na het afsluiten van het proces het PID van grep onderaan de freelist zal komen te staan. Als je echter gaat schieten omdat je medelingen krijgt dat de procestabel vol zit, is dit echter wel iets om rekening mee te houden.
Slay is sowieso geschikter voor dit werk.
Ik geef zelf trouwens de voorkeur aan:

<pipeline> | xargs kill

Uit ervaring weet ik dat als je een lange pipeline hebt met veel quotes erin dat "kill `<pipeline>`" soms niet goed door de shell begrepen wordt.

-Desecrator
Mwah... ik had xargs pas nodig toen ik alle files in /usr/src/linux als argumenten wilde meegeven aan een prog >:)

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Op donderdag 18 oktober 2001 17:49 schreef deadinspace het volgende:

Mwah... ik had xargs pas nodig toen ik alle files in /usr/src/linux als argumenten wilde meegeven aan een prog >:)
:? Wat wilde je doen dan?

rm `find /usr/src/linux` ofzo? Dat kan anders :P

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 23:45

deadinspace

The what goes where now?

Op donderdag 18 oktober 2001 18:05 schreef mithalph het volgende:

[..]

:? Wat wilde je doen dan?

rm `find /usr/src/linux` ofzo? Dat kan anders :P
ow, weer wat geleerd :D

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 14:36

odysseus

Debian GNU/Linux Sid

Op donderdag 18 oktober 2001 15:42 schreef Desecrator het volgende:
Het eind resultaat is dus de processen van de gebruiker en de grep <user> van root. Die laatste wil je niet, dus die mik je weg met grep -v "grep <user>"
Dat is wel iets anders dan je eerder schreef, toen had je het over 'grep -v grep', wat dus ook alle andere greps wegfiltert (die je mogelijk ook had willen killen). Het beste lijkt me inderdaad (zoals al ergens werd genoemd) om te matchen aan het begin van de regel:
code:
1
kill -9 `ps -ef | grep ^user | nawk {'print $2'}`

offtopic:
Nog maar eens proberen: hoe typ je backquotes in een console? Ben er nog niet achter (ben gisteren ook de hele dag weggeweest).

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 23:45

deadinspace

The what goes where now?

Op vrijdag 19 oktober 2001 15:52 schreef odysseus het volgende:
Nog maar eens proberen: hoe typ je backquotes in een console?
Hoe bedoel je? In een virtual console of een terminal emulator?
Wat bedoel je met backquotes? Deze: ` ?
Wat voor tobo?
Pagina: 1