Znám kill příkaz a většinou používáme pouze kill -9 Chcete-li násilně zabít proces, existuje mnoho dalších signálů, které lze použít s kill . Ale zajímalo by mě, jaké jsou případy použití pkill a killall , pokud již existuje příkaz kill.
Proveďte pkill a killall použijte kill velení při jejich realizaci? Chci říct, že jsou to jen obaly nad kill nebo mají vlastní implementaci?
Také bych rád věděl, jak pgrep příkaz získá ID procesu z názvu procesu.
Používají všechny tyto příkazy stejná základní systémová volání? Existuje nějaký rozdíl z hlediska výkonu, který z nich je rychlejší?
Přijatá odpověď:
kill příkaz je velmi jednoduchý obal pro kill systémové volání , který ví pouze o ID procesů (PID). pkill a killall jsou také obaly pro kill systémové volání , (ve skutečnosti do knihovny libc, která přímo vyvolává systémové volání), ale může za vás určit PID na základě věcí, jako je název procesu, vlastník procesu, ID relace atd.
Jak pkill a killall práci lze vidět pomocí ltrace nebo strace na ně. V Linuxu oba čtou /proc souborový systém a pro každý nalezený pid (adresář) projde cestu tak, aby identifikoval proces podle jeho názvu nebo jiných atributů. Jak se to dělá, je technicky vzato, specifické pro jádro a systém. Obecně se čtou z /proc/<PID>/stat který obsahuje název příkazu jako 2. pole. Pro pkill -f a pgrep prozkoumejte /cmdline záznam pro každý procesní záznam PID.
pkill a pgrep použijte readproc systémové volání, zatímco killall ne. Nedokázal jsem říci, zda existuje rozdíl ve výkonu:budete to muset porovnat sami.