Alt+F2 如何将命令作为 init 进程的子进程运行?

Alt+F2 如何将命令作为 init 进程的子进程运行?

在 Lubuntu 18.04 上,如果我单击桌面菜单,然后单击其中的 lxterminal,然后在终端模拟器窗口中运行以下命令,我将得到

$ pstree -a -p   -s $$
systemd,1 --system --deserialize 19
  └─lightdm,661
      └─lightdm,862 --session-child 12 19
          └─lxsession,944 -s Lubuntu -e LXDE
              └─lxpanel,1087 --profile Lubuntu
                  └─lxterminal,23017
                      └─bash,23020
                          └─pstree,26853 -a -p -s 23020

如果我点击Alt+ F2,然后运行 ​​lxterminal 并在终端模拟器窗口中运行以下命令,我将得到

$ pstree -a -p   -s $$
systemd,1 --system --deserialize 19
  └─lxterminal,1480
      └─bash,27000
          └─pstree,27013 -a -p -s 27000

lxterminal第二个作为 的子项如何运行systemd?是通过孤立 lxterminal 进程并将其重新设置为 来完成的systemd吗?

该过程的原始父级和祖级是什么lxterminal

Alt我的问题实际上更笼统: +如何F2作为 init 进程的子进程运行任何命令?

相关源码在哪里?


我的怀疑:

当我按下alt_F2时,我猜它相当于单击桌面环境的菜单面板,然后选择“运行”。我想等效的情况是

lxpanel进程分叉一个进程以显示Run询问要运行什么命令的窗口,然后在分叉第二个进程来运行指定命令后退出。这会将执行指定命令的进程重新设置为 init 进程。 (与创建守护进程不同,执行指定命令的进程不会启动新的进程会话。)

由于lxpanel位于 领导的进程会话中lxession,944,并且没有控制终端,因此运行指定命令的进程位于同一会话中,也没有控制终端。SIGHUP如果不通过提前终止中间进程来将执行指定命令的进程重新设置为 init 进程,则似乎不必担心被发送。

那么通过提前终止中间进程来将执行指定命令的进程重新定位到 init 进程的目的是什么呢?

相关内容