Vraag Wat is het verschil tussen 'killall' en 'pkill'?


Na gebruik gewoon gewoon kill <some_pid> op Unix-systemen gedurende vele jaren, heb ik geleerd pkill van een jongere Linux-savvy collega collega1.

Ik accepteerde al snel de Linux-weg,pgrep-ing en pkill-ing door vele dagen en nachten, door vertragingen en raceomstandigheden. Dit ging allemaal goed en wel.

Maar nu zie ik niets anders dan killall. How-to's lijken alleen te vermelden killallen ik weet niet zeker of dit een soort parallelle ontwikkeling is, of zo killall is een opvolger van pkill, of iets anders.

Het lijkt te functioneren als een meer doelgericht pkill, maar ik weet zeker dat ik iets mis.

Kan een Ubuntu / Debian-savvy zijn2 persoon legt uit wanneer (of waarom) killall moet worden gebruikt, vooral als dit bij voorkeur moet worden gebruikt pkill (wanneer pkill lijkt vaak makkelijker, omdat ik slordiger kan zijn met name-matching, althans standaard).

Bij het spreken van killall, Ik denk niet aan de opdracht dat op sommige Unix-systemen (Solaris, AIX,?) Alle gebruikersprocessen zouden worden gedood. Hier is een beschrijving van die versie, van een manpage voor IBM's AIX:

De killall-opdracht annuleert alles   processen die u bent gestart, behalve   degenen die het killall-proces produceren.   Deze opdracht biedt een handig   middelen om alle processen te annuleren   gemaakt door de shell die je bestuurt.   Wanneer gestart door een rootgebruiker, de   killall commando annuleert alles   opzegbare processen behalve die   processen waarmee het is gestart. Als meerdere   Signalen worden opgegeven, alleen de laatste   een is effectief.

1 'collega' is een gratis upgrade van 'collega', dus net zo goed.
2 Oorspronkelijk dacht ik dat dit een Linux- of Debian-ding was, maar sommige bronnen zeggen dat de Linux killall is afgeleid van Unix met BSD-smaak.


88
2018-02-22 07:31


oorsprong




antwoorden:


Ik denk dat je killall in how-to's ziet omdat het standaard de precieze procesnaam vereist, terwijl pkill basale patroonafstemming doet. Dus, killall is veiliger voor gebruikers om blindelings te kopiëren en plakken.

Pkill en killall hebben beiden onderscheidende opties. Killall heeft een vlag die overeenkomt met de leeftijd van het proces, pkill heeft een vlag om alleen processen op een gegeven tty te vernietigen. Etcetera ad nauseum. Geen van beide is beter, ze hebben gewoon verschillende specialiteiten.

Ik zie aan de hand van hun manpagina's dat de moordenaar afkomstig is van de psmisc-pakket, dat verschillende hulpprogramma's voor procesbeheer heeft, maar dat vooral niet bevat ps. Het is de procps pakket die ps, top, kill en pkill (onder andere) heeft. Ik waagde dat procps oorspronkelijk geen pkill had, dus psmisc krabde een jeuk en kwam met killall.

De pkill / pgrep man pagina zegt dat ze zijn geïntroduceerd in Solaris 7. Zoals je al zei, jgbelacqua, De killall van Solaris was niet het hulpprogramma dat psmisc biedt, dus Solaris had waarschijnlijk alleen het procps-pakket. Iemand wilde een proces voor het matchen van patronen, dus pkill en pgrep. Of het werd ontwikkeld door de procps dev of later werd toegevoegd, ik weet het niet. Hoe dan ook, het heeft het overal gemaakt en werd onderdeel van * nixes.

Meer bronnen:


64
2018-02-22 08:06



Hmm - er was een killall op (oude?) Solaris-systemen, maar het gedroeg zich anders. Het heeft alles gedood. - belacqua
@manish - er, er was een andere killall op SysV-systemen. - belacqua
@djeikyb De gedachte over killall veiliger klinken klinkt goed, of dat zou in ieder geval veel van zijn populariteit kunnen verklaren. - belacqua
@Manish: pkill (no kill) heeft geen pid-nummer nodig, noch de procesnaam. Het geeft een match met de procesnaam. - Javier Rivera
killall is safer for users to blindly copy and paste, behalve als je op een computer zit waar killall echt alles doodt. Het is jammer dat de twee verschillende hulpprogramma's dezelfde naam hebben. - Lie Ryan


Wees voorzichtig met "killall". Op sommige systemen (ik ben vergeten welke) doodden iedereen alle processen. Het negeert stilzwijgend argumenten en brengt uw systeem tot stilstand.


7
2017-07-30 08:26



Dit is niet waar. killall zonder argumenten zal niets doen, en killall zal de argumenten niet negeren. kill -9 -1 kan uw systeem doden, en killall -9 -1 net zo goed. Maar niet alleen killall [program] - Thomas Ward♦
Het is waar op SysV-systemen, zoals nu vermeld in de oorspronkelijke vraag. - alanc


als je / etc / bash_completion activeert, na killall <part_of_process_name> en druk op tab - automatisch voltooit de procesnaam uit de lijst met lopende processen


3
2018-02-22 12:28



Dezelfde automatische aanvulling zal worden gedaan met pgrep / pkill. Iets wat ik gewoonlijk doe, is pkill plug<tab> om de flash-plug-in voor firefox te doden als ik weet dat ik niets heb wat ik een tijdje wil gebruiken maar toch actief wil gebruiken firefox. Dit is een functie van de shell, niet een verschil tussen killall en pgrep / pkill. - Arcege
Ik zei niet dat het een verschil is, het is gewoon een leuke functie om te voorkomen dat naar PID's wordt gezocht, namen worden verwerkt en enz. - jet


Als je de opties op beide programma's bekijkt, zie je dat ze allebei ongeveer hetzelfde doen, maar op verschillende manieren.

pkill voert matching uit op verschillende attributen van een proces (CMD, PID, PPID, UID ...) en stuurt het gegeven signaal naar elk proces dat overeenkomt. (Voor CMD wordt een reguliere expressie gebruikt, voor anderen is dit een tekenreeks). pkill is niet interactief, maar beter voor batchprogramma's.

killall zal matching uitvoeren op de procesnaam (comm) of user (user), niet op de hele commandostring. Het argument wordt gebruikt als een eenvoudige string en moet overeenkomen met de volledige 'comm' waarde (er is ook een --regexp optie om dit te wijzigen). killall heeft --interactive en --younger - dan opties, die pkill niet heeft.

Er is ook een killall5 afkomstig van SysV-dagen en is geporteerd naar andere UNIX-varianten (vermoedelijk onder het Ubuntu-pakket 'sysutils'). Dit gedraagt ​​zich anders op de ouderwetse manier. Dit werd vaak intern gebruikt om de init-scripts uit te schakelen of om over te schakelen naar de modus voor één gebruiker.


2
2018-02-22 13:24



Nee, ook niet pkill noch killall moet in scripts worden gebruikt, alleen interactief en met de nodige voorzichtigheid. - geirha