更改进程的父级

时间:2010-10-01 18:59:35

标签: c linux process

是否可以更改流程父级?
例如:父A有子B我可以让B的父亲是Init进程而不杀A?

2 个答案:

答案 0 :(得分:15)

调用ptrace(PTRACE_ATTACH, pid, x, y)其中pid是B的pid(在您的示例中),x和y无关紧要(可能将它们设置为NULL)将使调用进程成为B的父级许多(但不是全部)目的(基于进程的用户ID的限制,当然,除非你是root用户,否则不要接管别人的进程)。

在调用ptrace(PTRACE_ATTACH,之后,孩子仍然会从getppid()获得其原始父级或init的pid作为其父级pid,但跟踪过程将能够调用wait并获取{来自流程B的{1}}。

这里有很多内容,所以你应该阅读SIGCHLD并确保你能够很好地理解这些细节。

答案 1 :(得分:14)

不是来自流程B之外。

从进程B内部,你可以调用fork来制作你的进程副本,然后让原来退出。当发生这种情况时,新副本B2将不是A的子节点,其父节点将设置为1(init进程)。