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)
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.
Is dit niet mogelijk ? Daar moet toch wel iets voor bestaan.
Vast een 1 of ander shellscriptje die dat wel kan...
http://www.shelldorado.com
Anders zelf even schrijven
http://www.shelldorado.com
Anders zelf even schrijven
Zo kan het ook:
kill -9 `ps -ef|grep <user>|grep -v grep|nawk {'print $2'}`
Let op de backquotes.
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
-Desecrator
Verwijderd
Zonder vlag is gelijk aan -15:Op woensdag 17 oktober 2001 18:13 schreef BallisticToilet het volgende:
Een kill -15 is nog netter.
man kill
-Desecrator...
-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)
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.Op woensdag 17 oktober 2001 18:02 schreef BallisticToilet het volgende:
kill -9 `ps -ef|grep <user>|grep -v grep|nawk {'print $2'}`
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
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
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.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,
-Desecrator
Dan kun je op die solaris box net zo goed de resetknop indrukken. killall schiet namelijk alles af, de naam parameter kent ie niet.Op woensdag 17 oktober 2001 15:46 schreef spock13 het volgende:
killall -9 naam
aangezien het allemaal dezelfde processen zijn moet dat werken
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 wiltOp 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.
Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.
Verwijderd
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.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
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":
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.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.
-Desecrator
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 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.
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.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
Dus die grep -v grep kan er echt wel tussenuit!
Verwijderd
Even voor de duidelijkheid dat we het allemaal over hetzelfde hebben.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!
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
In Debian zit een utility genaamd slay.
root@voyager[~]# slay chakotay
En alle processen van chakotay worden in één keer om zeep geholpen.
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.
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.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.
Verwijderd
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 alsOp 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.
"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
Dat krijg je idd, ik heb het al getest.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".
Slay is sowieso geschikter voor dit werk.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.
Mwah... ik had xargs pas nodig toen ik alle files in /usr/src/linux als argumenten wilde meegeven aan een progIk 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
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
rm `find /usr/src/linux` ofzo? Dat kan anders
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
ow, weer wat geleerdOp donderdag 18 oktober 2001 18:05 schreef mithalph het volgende:
[..]
Wat wilde je doen dan?
rm `find /usr/src/linux` ofzo? Dat kan anders
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: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>"
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).
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.
Hoe bedoel je? In een virtual console of een terminal emulator?Op vrijdag 19 oktober 2001 15:52 schreef odysseus het volgende:
Nog maar eens proberen: hoe typ je backquotes in een console?
Wat bedoel je met backquotes? Deze: ` ?
Wat voor tobo?
Pagina: 1