GNU/Linux >> Znalost Linux >  >> Linux

Jak nastavit ID procesu v Linuxu pro konkrétní program

Ve skutečnosti existuje způsob, jak to udělat. Od jádra 3.3 se sadou CONFIG_CHECKPOINT_RESTORE (která je nastavena ve většině distribucí) existuje /proc/sys/kernel/ns_last_pid, který obsahuje poslední pid generovaný jádrem. Pokud tedy chcete nastavit PID pro rozvětvený program, musíte provést tyto akce:

  1. Otevřete /proc/sys/kernel/ns_last_pid a získejte fd
  2. přidejte LOCK_EX
  3. zapište PID-1
  4. rozvětvení

Voilà! Dítě bude mít PID, které jste chtěli. Také nezapomeňte odemknout (hrnout s LOCK_UN) a zavřít ns_last_pid.

Kód C si můžete prohlédnout na mém blogu zde.


Jak již mnozí navrhovali, nemůžete nastavit přímo PID, ale obvykle mají shelly zařízení, aby věděly, které je poslední rozvětvené ID procesu.

Například v bash můžete spustit spustitelný soubor na pozadí (přidat & ) a najděte jeho PID v proměnné $! .Příklad:

$ lsof >/dev/null &
[1] 15458
$ echo $!
15458

Na CentOS7.2 můžete jednoduše provést následující:

Řekněme, že chcete provést příkaz spánku s PID 1894.

sudo echo 1893 > /proc/sys/kernel/ns_last_pid; sleep 1000

(Mějte však na paměti, že pokud se náhodou jiný proces spustí v extrémně krátkém čase mezi příkazem echo a sleep, můžete skončit s PID 1895+. Testoval jsem to stokrát a nikdy se to nestalo mně. Pokud chcete zaručit PID, budete muset soubor po zápisu zamknout, spustit režim spánku a pak soubor odemknout, jak je navrženo v Ruslanově odpovědi výše.)


Linux
  1. Linux – Jak zrušit sdílení sítě pro aktuální proces?

  2. Jak nastavit afinitu CPU pro proces z C nebo C++ v Linuxu?

  3. Jak najít soubor .pid pro daný proces

  1. Linux – Jak nastavit afinitu procesoru k procesu v Linuxu?

  2. Jak restartovat (nebo resetovat) běžící proces v Linuxu?

  3. Jak zabít proces běžící na konkrétním portu v Linuxu?

  1. Jak zakázat konkrétní příkaz pro konkrétního uživatele v Linuxu

  2. Knihovna Python pro správu procesů v Linuxu

  3. Jak dosáhnout toho, aby se pro konkrétní proces spustil pouze uživatel, pid a příkaz? (Ubuntu 11.10)