GNU/Linux >> Tutoriels Linux >  >> Linux

Comment définir l'ID de processus sous Linux pour un programme spécifique

En fait, il existe un moyen de le faire. Depuis le noyau 3.3 avec l'ensemble CONFIG_CHECKPOINT_RESTORE (qui est défini dans la plupart des distributions), il y a /proc/sys/kernel/ns_last_pid qui contient le dernier pid généré par le noyau. Ainsi, si vous souhaitez définir un PID pour un programme dérivé, vous devez effectuer ces actions :

  1. Ouvrez /proc/sys/kernel/ns_last_pid et obtenez fd
  2. floquez-le avec LOCK_EX
  3. écrire PID-1
  4. fourche

Voilà ! L'enfant aura le PID que vous vouliez. N'oubliez pas non plus de déverrouiller (flock avec LOCK_UN) et de fermer ns_last_pid.

Vous pouvez consulter le code C sur mon blog ici.


Comme beaucoup l'ont déjà suggéré, vous ne pouvez pas définir directement un PID, mais les shells ont généralement la possibilité de savoir quel est le dernier ID de processus dérivé.

Par exemple en bash vous pouvez lancer un exécutable en arrière-plan (en ajoutant & ) et trouver son PID dans la variable $! .Exemple :

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

Sur CentOS7.2, vous pouvez simplement faire ce qui suit :

Supposons que vous souhaitiez exécuter la commande sleep avec un PID de 1894.

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

(Cependant, gardez à l'esprit que si par hasard un autre processus s'exécute dans le laps de temps extrêmement court entre la commande echo et sleep, vous pourriez vous retrouver avec un PID de 1895+. Je l'ai testé des centaines de fois et cela ne s'est jamais produit Si vous voulez garantir le PID, vous devrez verrouiller le fichier après y avoir écrit, exécuter la mise en veille, puis déverrouiller le fichier comme suggéré dans la réponse de Ruslan ci-dessus.)


Linux
  1. Linux - Comment annuler le partage du réseau pour le processus actuel ?

  2. Comment définir l'affinité CPU pour un processus à partir de C ou C++ sous Linux ?

  3. bibliothèque Python pour la gestion des processus Linux

  4. Comment obtenir uniquement l'utilisateur, le pid et la commande exécutée pour un processus spécifique ? (Ubuntu 11.10)

  5. Comment définir la swapiness par processus pour Linux?

Comment exécuter une commande pendant une durée spécifique sous Linux

Comment configurer tlog sur les hôtes Linux pour la journalisation du terminal

Comment configurer un cluster Pacemaker pour Linux haute disponibilité

Comment définir un fond d'écran différent pour chaque moniteur sous Linux

Comment trouver le PID et le PPID d'un processus sous Linux

Comment configurer un killswitch Linux pour les VPN