GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So legen Sie die Prozess-ID in Linux für ein bestimmtes Programm fest

Tatsächlich gibt es eine Möglichkeit, dies zu tun. Seit Kernel 3.3 mit gesetztem CONFIG_CHECKPOINT_RESTORE (das in den meisten Distributionen gesetzt ist), gibt es /proc/sys/kernel/ns_last_pid, das die letzte vom Kernel generierte PID enthält. Wenn Sie also die PID für ein gegabeltes Programm festlegen möchten, müssen Sie diese Aktionen ausführen:

  1. Öffne /proc/sys/kernel/ns_last_pid und hole fd
  2. mit LOCK_EX beflocken
  3. PID-1 schreiben
  4. Gabelung

Voilà! Das Kind erhält die von Ihnen gewünschte PID. Vergessen Sie auch nicht, ns_last_pid zu entsperren (mit LOCK_UN zu sperren) und zu schließen.

Sie können den C-Code hier in meinem Blog auschecken.


Wie viele bereits vorgeschlagen haben, können Sie eine PID nicht direkt setzen, aber normalerweise haben Shells die Möglichkeit, zu wissen, welche die letzte gegabelte Prozess-ID ist.

Beispielsweise können Sie in bash eine ausführbare Datei im Hintergrund erstellen (anhängen von & ) und finden Sie seine PID in der Variablen $! .Beispiel:

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

Unter CentOS7.2 können Sie einfach Folgendes tun:

Angenommen, Sie möchten den Sleep-Befehl mit einer PID von 1894 ausführen.

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

(Denken Sie jedoch daran, dass, wenn zufällig ein anderer Prozess in der extrem kurzen Zeit zwischen dem Echo- und dem Sleep-Befehl ausgeführt wird, Sie mit einer PID von 1895+ enden könnten. Ich habe es hunderte Male getestet und es ist nie passiert Wenn Sie die PID garantieren möchten, müssen Sie die Datei sperren, nachdem Sie in sie geschrieben haben, Schlaf ausführen und dann die Datei entsperren, wie in Ruslans Antwort oben vorgeschlagen.)


Linux
  1. Linux – Wie stellt man die Prozessoraffinität eines Prozesses unter Linux ein?

  2. Wie kann man einen laufenden Prozess unter Linux neu starten (oder zurücksetzen)?

  3. So deaktivieren Sie einen bestimmten Befehl für einen bestimmten Benutzer in Linux

  4. Wie stelle ich Swapiness pro Prozess für Linux ein?

  5. So finden Sie die .pid-Datei für einen bestimmten Prozess

So führen Sie einen Befehl für eine bestimmte Zeit in Linux aus

So richten Sie tlog auf Linux-Hosts für die Terminalprotokollierung ein

So richten Sie einen Pacemaker-Cluster für Linux mit hoher Verfügbarkeit ein

So legen Sie in Linux für jeden Monitor ein anderes Hintergrundbild fest

So finden Sie die PID und PPID eines Prozesses in Linux

So richten Sie einen Linux-Killswitch für VPNs ein