Bor*_*aso 20 linux process set
我想知道是否有某种方法可以在运行之前强制将某些特定的进程ID用于Linux.我需要提前知道进程ID.
Rus*_*iev 26
实际上,有一种方法可以做到这一点.由于内核3.3设置了CONFIG_CHECKPOINT_RESTORE(在大多数发行版中设置),因此/ proc/sys/kernel/ns_last_pid包含内核生成的最后一个pid.因此,如果要为分叉程序设置PID,则需要执行以下操作:
瞧!孩子将拥有你想要的PID.另外,不要忘记解锁(使用LOCK_UN进行群集)并关闭ns_last_pid.
您可以在我的博客上查看 C代码.
在CentOS7.2上你可以简单地执行以下操作:
假设您要执行 PID 为 1894 的 sleep 命令。
sudo echo 1893 > /proc/sys/kernel/ns_last_pid; sleep 1000
Run Code Online (Sandbox Code Playgroud)
(但是,请记住,如果碰巧另一个进程在 echo 和 sleep 命令之间的极短时间内执行,您可能会得到 PID 为 1895+ 的结果。我已经测试了数百次,但从未发生过这种情况如果你想保证 PID,你需要在写入文件后锁定文件,执行睡眠,然后按照上面 Ruslan 的答案中的建议解锁文件。)
正如许多人已经建议的那样,您不能直接设置PID,但是通常Shell会知道哪些是最后的分叉进程ID。
例如,在bash中,您可以在后台执行一个可执行文件(追加&),然后在变量中找到其PID $!。例:
$ lsof >/dev/null &
[1] 15458
$ echo $!
15458
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27334 次 |
| 最近记录: |