実は、これを行う方法があります。 CONFIG_CHECKPOINT_RESTORE が設定されたカーネル 3.3 以降 (ほとんどのディストリビューションで設定されています)、カーネルによって生成された最後の pid を含む /proc/sys/kernel/ns_last_pid があります。そのため、フォークされたプログラムに PID を設定する場合は、次のアクションを実行する必要があります:
<オール>ほら!子はあなたが望んでいた PID を持っています。また、ロックを解除 (LOCK_UN で群れ) し、ns_last_pid を閉じることを忘れないでください。
ここの私のブログで C コードをチェックアウトできます。
多くの人がすでに示唆しているように、PID を直接設定することはできませんが、通常、シェルには最後にフォークされたプロセス ID を知る機能があります。
たとえば、bash では、バックグラウンドで実行可能ファイルを起動できます (&
を追加) ) 変数 $!
でその PID を見つけます .例:
$ lsof >/dev/null &
[1] 15458
$ echo $!
15458
CentOS7.2 では、次の操作を簡単に行うことができます:
1894 の PID でスリープ コマンドを実行するとします。
sudo echo 1893 > /proc/sys/kernel/ns_last_pid; sleep 1000
(ただし、echo コマンドと sleep コマンドの間の非常に短い時間内に別のプロセスが実行された場合、PID が 1895+ になる可能性があることに注意してください。何百回もテストしましたが、発生したことはありません。 PID を保証したい場合は、書き込み後にファイルをロックし、sleep を実行してから、上記の Ruslan の回答で提案されているようにファイルのロックを解除する必要があります。)