GNU/Linux >> Znalost Linux >  >> Linux

Rozdíl mezi Kill, Pkill a Killall?

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.


Linux
  1. Rozdíl mezi fork(), vfork(), exec() a clone()

  2. Jaký je rozdíl mezi ls a l?

  3. Jaký je rozdíl mezi Nepreemptivním, Preemptivním a Selektivním Preemptivním jádrem?

  1. Jaký je rozdíl mezi pkill a killall?

  2. Jaký je rozdíl mezi kill , pkill a killall?

  3. Jaký je rozdíl mezi unlink a rm?

  1. Jaký je rozdíl mezi Sudo Su – a Sudo Su –?

  2. Rozdíl mezi Getty a Agetty?

  3. Rozdíl mezi ~/.profile a ~/.bash_profile?