Jaký je rozdíl mezi "killall" a "pkill"?

88

Po použití pouhýchkill <some_pid> na systémech Unix po mnoho let jsem se naučilpkill od mladšího spolupracovníka spolupracovník 1 p>

Brzy jsem přijal linuxovou cestu,pgrep -ing apkill -ing během mnoha dnů a nocí, a to díky pomalým a drastickým podmínkám. To všechno bylo dobré a dobré.

Nyní však nevidím nic nežkillall. Zdá se, že se zdá, že se jen zmiňujekillall a nejsem si jist, jestli je to nějaký paralelní vývoj, nebo jestlikillall je nástupcempkill, nebo něco jiného.

Zdá se, že funguje jako cílenějšípkill, ale určitě mi něco chybí.

Může uživatel Ubuntu / Debian-savvy 2 vysvětlit, kdy (nebo proč)killall by měl být použit, zejména pokud by měl být používán s výhodoupkill (připkill vypadá to jednodušší, protože můžu být nejistý se jmenováním, alespoň ve výchozím nastavení).

Když mluvíme okillall, nemyslím na příkaz, který by v některých Unix systémech (Solaris, AIX,?) zabíjel všechny uživatelské procesy. Zde je popis této verze z manpage pro IBM AIX :

  

Příkaz killall zruší všechny   procesy, které jste začali, kromě   ty, které produkují proces killall.   Tento příkaz poskytuje pohodlné   způsoby zrušení všech procesů   vytvořené shellem, které řídíte.   Při spuštění uživatelem root,   příkaz killall zruší všechny   zrušitelné procesy kromě těch   procesy, které ji začaly. Pokud je několik   Signály jsou zadány, pouze poslední   jedna je účinná.

1 'kolega' je bezplatný upgrade z "spolupracovníka", takže by mohl také fungovat. 2 Původně jsem si myslel, , ale některé zdroje říkají, že Linuxkillall je odvozen od BSD-flavored Unix.

    
dané belacqua 22.02.2011 08:31

4 odpovědi

64

Myslím, že vidíte killall v tom, jak to, protože ve výchozím nastavení vyžaduje přesný název procesu, zatímco pkill provádí základní přizpůsobení vzoru. Takže killall je bezpečnější pro uživatele, aby slepě kopírovali a vložili.

Pkill a killall oba mají rozlišovací možnosti. Killall má vlajku, aby odpovídala věku procesu, pkill má vlajku jen zabít procesy na daném tty. Etcetera ad nauseum. Ani je lepší , mají pouze různé speciality.

Z jejich stránek man vidím, že killall pochází z balíčku psmisc , který má několik nástrojů pro správu procesů, ale zejména obsahujeps. Je to balíček pro procps , který má ps, top, kill a pkill (mezi jinými). Vsadil bych, že propsy původně neměly pkill, takže psmisc poškrábal svědění a přišel s killall.

Manuální stránka pkill / pgrep uvádí, že byly představeny v systému Solaris 7. Jak jste uvedli, jgbelacqua Solarisova killall nebyla utilita psmisc poskytuje, takže Solaris měl pravděpodobně pouze balíček procps. Někdo chtěl nástroj pro porovnávání vzorů, tedy pkill a pgrep. Ať už to bylo vyvinuto procps dev nebo přidáno do později, nevím. Bez ohledu na to se to stalo a stalo se součástí všude * nixes.

Další zdroje:

odpověděl djeikyb 22.02.2011 09:06
7

Buďte opatrní s "killall". Na některých systémech (zapomínám, které) killall zabíjí všechny procesy. Ticho ignoruje argumenty a přinutí váš systém k úplnému zastavení.

    
odpověděl phessler 30.07.2012 10:26
3

Pokud aktivujete / etc / bash_completion, pokillall <part_of_process_name> a na záložce hit - auto dokončí název procesu ze seznamu běžících procesů

    
odpověděl jet 22.02.2011 13:28
2

Pokud se podíváte na možnosti obou programů, uvidíte, že oba dělají totéž, ale různými způsoby.

pkill provede shodu s různými atributy procesu (CMD, PID, PPID, UID ...) a odešle daný signál do každého procesu, který odpovídá. (Pro CMD se používá regulární výraz, pro ostatní to je řetězec). pkill není interaktivní, ale lepší pro dávkové programy.

killall provede shodu s názvem procesu (comm) nebo uživatelem (uživatelem), nikoliv na celém příkazovém řetězci. Argument se používá jako jednoduchý řetězec a musí odpovídat celé hodnotě 'comm' (existuje také možnost --regexp tuto změnu). killall má --interaktivní a nejmodernější - než možnosti, které pkill nemá.

K dispozici je také killall5 ze dnů SysV a byl přenesen na jiné UNIX varianty (pravděpodobně pod balíčkem Ubuntu 'sysutils'). To se chová jinak způsobem starým způsobem. To se často používalo interně pro inicializační skripty k vypnutí nebo změně režimu jednoho uživatele.

    
odpověděl Arcege 22.02.2011 14:24