Mi a különbség a "killall" és a "pkill" között?

88

Miután évek óta egyszerűen csak akill <some_pid> -ot használtam a Unix rendszereken, tanultampkill -ot fiatalabb Linux-szakértő munkatárs kollégám 1 p>

Hamarosan elfogadtam a Linux-módot, apgrep -ing-ot és apkill -edet sok nap és éjszaka során, a lassítások és a versenykörülmények között. Ez jó és jó volt.

De most nem látok semmit, csakkillall. A "how-to" csak akillall -ot említi, és nem vagyok biztos benne, hogy ez valamiféle párhuzamos fejlesztés, vagy ha akillall apkill vagy valami más.

Úgy tűnik, célzottabban működikpkill, de biztos vagyok benne, hogy hiányzik valami.

Lehet egy Ubuntu / Debian-szakértő 2 személy elmagyarázni, mikor (vagy miért) akillall -ot kell használni, különösen akkor, ha apkill (pkill könnyebbnek tűnik, mert lehet, hogy a névegyezéssel kicsit jobban lehet, legalábbis alapértelmezés szerint).

Amikor akillall -ról beszélünk, nem gondolok arra a parancsra, hogy egyes Unix rendszereken (Solaris, AIX,?) minden felhasználói folyamatot elpusztítanának. Az alábbi változat leírása: a manipálya az IBM AIX-hez :

  

A killall parancs mindent töröl   az elindított folyamatok, kivéve   akik a killall-folyamatot termelik.   Ez a parancs kényelmes   az összes folyamatot törölni   által létrehozott shell által létrehozott.   Amikor egy root felhasználó elindította, a   A killall parancs mindent töröl   törölhető eljárások, kivéve azokat   folyamatokat indított el. Ha több   Jeleket adnak meg, csak az utolsó   az egyik hatékony.

1 "kolléga" a "munkatárs" ingyenes frissítése, így lehet. 2 Eredetileg azt hittem, hogy ez egy Linux vagy Debian dolog , de néhány forrás azt mondja, hogy a Linuxkillall a BSD ízesített Unix-ból származik.

    
készlet belacqua 22.02.2011 08:31
forrás

4 válasz

64

Úgy gondolom, hogy a killall-ot látod, mert alapértelmezés szerint a pontos folyamatnévre van szükséged, míg a pkill az alapminta-illesztést. Így a killall biztonságosabb a felhasználók számára a véletlen másolás és beillesztés érdekében.

A Pkill és a killall mindkettőnek megkülönböztető lehetőségei vannak. A Killall-nek van egy zászlója, amely megfelel a folyamat korának, a pkill zászlaja csak egy adott tty folyamatainak megölését jelenti. Etcetera ad nauseum. Sem jobb , hanem csak különlegességek vannak.

A man oldalainkból kiderül, hogy a killall a psmisc csomagból származik, amely többféle processz-kezelő segédprogrammal rendelkezik, de nem tartalmazza aps -ot. Ez a procps csomag , amely ps, top, kill, és pkill (többek között). Fogadtam, hogy a procps nem eredetileg pkill volt, így a psmisc karmolt egy viszketést és a killall-al jött.

A pkill / pgrep man oldalon azt mondja, hogy a Solaris 7-ben kerültek be. Amint említi, jgbelacqua , a Solaris killall nem volt a psmisc segédprogram, így a Solaris valószínűleg csak a procps csomagot tartalmazza. Valaki azt akarta, hogy egy minta illeszkedjen a folyamat eszköze, így pkill és pgrep. Akár a procps dev fejlesztette ki, akár később is hozzáadott, nem tudom. Függetlenül attól, hogy mindenhol létrejött és részévé vált. * / Nixes.

További források:

válasz adott djeikyb 22.02.2011 09:06
forrás
7

Vigyázzon a "killall" -al. Egyes rendszereknél (elfelejtem), a killall megöli az összes folyamatot. Csendesen figyelmen kívül hagyja az érveket, és a rendszer teljesen leáll.

    
válasz adott phessler 30.07.2012 10:26
forrás
3

ha aktiválja az / etc / bash_completion parancsot, akillall <part_of_process_name> és a hit tabulátor után - az automatikus befejezi a folyamat nevét a futó folyamatok listájáról

    
válasz adott jet 22.02.2011 13:28
forrás
2

Ha megnézzük mindkét program opcióit, látni fogja, hogy mindkettő ugyanolyan, de különböző módon működik.

A pkill elvégzi a folyamat különböző attribútumainak (CMD, PID, PPID, UID ...) illesztését, és elküldi az adott jelzést minden egyes, egymáshoz illeszkedő folyamatnak. (A CMD esetében szabályos kifejezést használnak, mások számára pedig egy karakterlánc). A pkill nem interaktív, de jobb a kötegelt programokhoz.

A killall végrehajtja a folyamatnevet (comm) vagy felhasználó (felhasználó), nem pedig az egész parancssort. Az argumentumot egyszerű karakterláncként használják, és meg kell egyeznie az egész "comm" értékkel (van egy --regexp opció is, hogy ezt módosítsák). A killall - interaktív és - gyengébb - opciókat tartalmaz, amelyek nem rendelkeznek pkillel.

Van egy killall5 is a SysV naptól, és más UNIX változatokra került (feltételezhetően az Ubuntu csomag "sysutils" alatt). Ez másképp viselkedik a régi módon. Ezt gyakran használták internálisan az init szkriptekhez, hogy leálljanak vagy áttérjenek egyfelhasználós üzemmódba.

    
válasz adott Arcege 22.02.2011 14:24
forrás