在 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 进程的目的是什么呢?