我知道这可以在用户空间中完成,并且已经回答了 before .
但是,我希望能够通过内核函数/模块来完成此操作。
更新
c 代码(从其他回答的问题中引用)是 criu 项目的一部分。并且文件 /proc/sys/kernel/ns_last_pid
并非在所有系统中都存在。所以,该代码在 ubuntu 上不起作用。有什么办法可以让它在 ubuntu 上运行吗?
我的最终目标是: fork 一个进程并为其提供父进程的 ID。
步骤:以进程名称 P 和 id x 开始。
- 从 P 内部派生一个进程。将子进程命名为 Q。
- 为父进程 P 分配一个临时 ID,例如 a。
- 修改子进程Q的id,设置为x。
- 另一个内核函数将重新连接子进程 Q 的父进程。以便 P 的父进程成为 Q 的父进程。换句话说,子进程将采用其父进程的身份。
- 进程 P 由于没有等待任何进程而终止。
我知道如何执行步骤 4-5。我已经实现了。我正在破解另一个 Linux 内核项目。所以,我没有其他办法解决这个问题。我必须以这种方式实现。
谢谢大家。
最佳答案
内核假定一个进程是通过它的pid来标识的;如果不更改整个内核的大量代码,更改已运行进程的 pid 不太可能起作用。
要为进程 Q 提供与进程 P 相同的 pid,请使用第三个进程 R,该进程 R 在 P 终止之后、Q 启动之前设置 ns_last_pid 。
(有关如何使用ns_last_pid
,请参阅this example。)
关于linux - 如何更改Linux中特定应用程序的进程ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26027455/