如何在linux中更改特定应用程序的进程ID

时间:2014-09-24 22:16:01

标签: linux process linux-kernel linux-device-driver kernel-module

我知道这可以在用户空间中完成,并且已经回答before

但是,我希望能够通过内核函数/模块来实现。

更新 c代码(从另一个回答的问题中提到)是criu项目的一部分。并且所有系统中都不存在文件/proc/sys/kernel/ns_last_pid。所以,代码不适用于ubuntu。有什么方法可以让它在ubuntu上运行吗?

我的最终目标是:fork一个进程并为其提供父进程的ID。

步骤:使用ID为。

的进程名称P进行凝视
  1. 从P内分叉一个进程。为孩子命名。
  2. 为父进程P分配一个临时ID,例如a。
  3. 更改子进程Q的ID并将其设置为x。
  4. 另一个内核函数将重新连接子进程Q的父对象。因此,P的父级成为Q的父级。换句话说,子进程将采用其父级的身份。
  5. 进程P因为没有等待任何进程而消失。
  6. 我知道如何执行步骤4-5。我已经实现了。我正在攻击另一个Linux内核项目。所以,我没有办法解决这个问题。我必须以这种方式实施。

    谢谢大家。

1 个答案:

答案 0 :(得分:0)

内核假定进程由其pid标识;如果不改变整个内核的大量代码,更改已经运行的进程的pid是不可能的。

要为进程Q提供与进程P相同的pid,请使用第三个进程R,它在P终止之后但在Q启动之前设置ns_last_pid。 (有关如何使用ns_last_pid,请参阅this example。)