首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能在创建新进程时设置父进程?

是否有可能在创建新进程时设置父进程?
EN

Unix & Linux用户
提问于 2017-09-03 08:56:45
回答 1查看 911关注 0票数 0

我想设置一个新开始的进程的父进程,这可能吗?

例如,假设我们通过登录管理器启动了一个新的桌面环境会话,因此我们的流程树如下所示:

代码语言:javascript
复制
init
 \- login-manager
     \- de-session

现在,我确实有了一个脚本来启动我最重要的应用程序,它应该从会话开始,出于各种原因,我希望将它们保留为脚本,而不是将它们迁移到任何DE的自动启动管理器。看起来是这样的:

代码语言:javascript
复制
#!/usr/bin/env

application1 &
application2 &
application3 &

在会话开始时自动运行此操作之后,我们的进程树如下所示:

代码语言:javascript
复制
init
 |- application1
 |- application2
 |- application3
 \- login-manager
     \- de-session

但我实际上想要的是在会话中“重新创建”这些进程,如下所示:

代码语言:javascript
复制
init
 \- login-manager
     \- de-session
         |- application1
         |- application2
         \- application3

那么,在另一个进程下是否有任何方法来“重新启用”一个过程?

EN

回答 1

Unix & Linux用户

发布于 2017-09-03 10:02:00

在一些系统中,您可以将一个进程标记为一个子收割机,这使得它承担了init的S角色,即为它的所有后代采用孤儿进程。

在Linux上,这是通过PR_SET_CHILD_SUBREAPER prctl()完成的。

因此,您可以将de-session启动为(此处硬编码用于Linux的PR_SET_CHILD_SUBREAPER值):

代码语言:javascript
复制
perl -e 'require "syscall.ph";
         syscall(&SYS_prctl,36,1) >= 0 or die "cannot set subreaper: $!";
         exec("de-session");'

但是,当de-session接收到它从未生成的进程的SIGCHLD信号时,它可能会感到困惑。您的init被设计用来处理这些问题,但可能不是您的de-session,所以您可能会发现您得到了一群僵尸,因为de-session从未承认它从未想要继承的进程的死亡。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/390061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档