How does Alt+F2 run a command as child of the init process?

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP












3














On Lubuntu 18.04, if I click the desktop menu, and lxterminal in it, and run the the following in the terminal emulator window, I will get



$ 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


If I hit Alt+F2, and run lxterminal and run the following in the terminal emulator window, I will get



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


How does the second make lxterminal run as a child of systemd? Is it done by orphaning the lxterminal process and reparenting it to systemd?



What were the original parent and grandparent of the lxterminal process?



My question is actually more general: how does Alt+F2 run any command as child of the init process?



Where is the relevant source code?




My suspicion:



when I hit alt_F2, I guess it is equivalent to click the menu panel of the desktop environment and then select "Run". I guess what happens in the equivalent is



The lxpanel process forks a process to show the Run window for asking what command to run, which then exits after forking a second process to run the specified command. That reparents the process executing the specified command to the init process. (Unlike creating a daemon process, the process executing the specified command doesn't start a new process session.)



Since lxpanel is in the process session led by lxession,944, and has no controlling terminal, the process running the specified command is in the same session and also has no controlling terminal. There seems to be no worry about being sent SIGHUP, if not reparenting the process executing the specified command to the init process, by terminating the middle process early.



So what is the purpose of reparenting the process executing the specified command to the init process, by terminating the middle process early?










share|improve this question



















  • 1




    Might help if you provide systemd version.
    – 炸鱼薯条德里克
    Dec 21 '18 at 5:23










  • what "version" did I provide?
    – Tim
    Dec 21 '18 at 12:55










  • +1. Odd. I must have read the code wrong, I thought it calls into libfm, but then the libfm function deliberately avoids this. See the 2015 commit github.com/lxde/libfm/commit/… The libfm commit description is very short, but you can understand the libfm commit by reading the bug report that lead to a similar change in Ubuntu Unity: bugs.launchpad.net/ubuntu/+source/update-manager/+bug/1020115 .
    – sourcejedi
    Dec 22 '18 at 20:22











  • @sourcejedi Thanks. See my suspicion.
    – Tim
    Dec 27 '18 at 17:41















3














On Lubuntu 18.04, if I click the desktop menu, and lxterminal in it, and run the the following in the terminal emulator window, I will get



$ 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


If I hit Alt+F2, and run lxterminal and run the following in the terminal emulator window, I will get



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


How does the second make lxterminal run as a child of systemd? Is it done by orphaning the lxterminal process and reparenting it to systemd?



What were the original parent and grandparent of the lxterminal process?



My question is actually more general: how does Alt+F2 run any command as child of the init process?



Where is the relevant source code?




My suspicion:



when I hit alt_F2, I guess it is equivalent to click the menu panel of the desktop environment and then select "Run". I guess what happens in the equivalent is



The lxpanel process forks a process to show the Run window for asking what command to run, which then exits after forking a second process to run the specified command. That reparents the process executing the specified command to the init process. (Unlike creating a daemon process, the process executing the specified command doesn't start a new process session.)



Since lxpanel is in the process session led by lxession,944, and has no controlling terminal, the process running the specified command is in the same session and also has no controlling terminal. There seems to be no worry about being sent SIGHUP, if not reparenting the process executing the specified command to the init process, by terminating the middle process early.



So what is the purpose of reparenting the process executing the specified command to the init process, by terminating the middle process early?










share|improve this question



















  • 1




    Might help if you provide systemd version.
    – 炸鱼薯条德里克
    Dec 21 '18 at 5:23










  • what "version" did I provide?
    – Tim
    Dec 21 '18 at 12:55










  • +1. Odd. I must have read the code wrong, I thought it calls into libfm, but then the libfm function deliberately avoids this. See the 2015 commit github.com/lxde/libfm/commit/… The libfm commit description is very short, but you can understand the libfm commit by reading the bug report that lead to a similar change in Ubuntu Unity: bugs.launchpad.net/ubuntu/+source/update-manager/+bug/1020115 .
    – sourcejedi
    Dec 22 '18 at 20:22











  • @sourcejedi Thanks. See my suspicion.
    – Tim
    Dec 27 '18 at 17:41













3












3








3


1





On Lubuntu 18.04, if I click the desktop menu, and lxterminal in it, and run the the following in the terminal emulator window, I will get



$ 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


If I hit Alt+F2, and run lxterminal and run the following in the terminal emulator window, I will get



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


How does the second make lxterminal run as a child of systemd? Is it done by orphaning the lxterminal process and reparenting it to systemd?



What were the original parent and grandparent of the lxterminal process?



My question is actually more general: how does Alt+F2 run any command as child of the init process?



Where is the relevant source code?




My suspicion:



when I hit alt_F2, I guess it is equivalent to click the menu panel of the desktop environment and then select "Run". I guess what happens in the equivalent is



The lxpanel process forks a process to show the Run window for asking what command to run, which then exits after forking a second process to run the specified command. That reparents the process executing the specified command to the init process. (Unlike creating a daemon process, the process executing the specified command doesn't start a new process session.)



Since lxpanel is in the process session led by lxession,944, and has no controlling terminal, the process running the specified command is in the same session and also has no controlling terminal. There seems to be no worry about being sent SIGHUP, if not reparenting the process executing the specified command to the init process, by terminating the middle process early.



So what is the purpose of reparenting the process executing the specified command to the init process, by terminating the middle process early?










share|improve this question















On Lubuntu 18.04, if I click the desktop menu, and lxterminal in it, and run the the following in the terminal emulator window, I will get



$ 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


If I hit Alt+F2, and run lxterminal and run the following in the terminal emulator window, I will get



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


How does the second make lxterminal run as a child of systemd? Is it done by orphaning the lxterminal process and reparenting it to systemd?



What were the original parent and grandparent of the lxterminal process?



My question is actually more general: how does Alt+F2 run any command as child of the init process?



Where is the relevant source code?




My suspicion:



when I hit alt_F2, I guess it is equivalent to click the menu panel of the desktop environment and then select "Run". I guess what happens in the equivalent is



The lxpanel process forks a process to show the Run window for asking what command to run, which then exits after forking a second process to run the specified command. That reparents the process executing the specified command to the init process. (Unlike creating a daemon process, the process executing the specified command doesn't start a new process session.)



Since lxpanel is in the process session led by lxession,944, and has no controlling terminal, the process running the specified command is in the same session and also has no controlling terminal. There seems to be no worry about being sent SIGHUP, if not reparenting the process executing the specified command to the init process, by terminating the middle process early.



So what is the purpose of reparenting the process executing the specified command to the init process, by terminating the middle process early?







desktop-environment






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited yesterday









Pro Backup

1,97862957




1,97862957










asked Dec 21 '18 at 2:11









Tim

26.1k74246455




26.1k74246455







  • 1




    Might help if you provide systemd version.
    – 炸鱼薯条德里克
    Dec 21 '18 at 5:23










  • what "version" did I provide?
    – Tim
    Dec 21 '18 at 12:55










  • +1. Odd. I must have read the code wrong, I thought it calls into libfm, but then the libfm function deliberately avoids this. See the 2015 commit github.com/lxde/libfm/commit/… The libfm commit description is very short, but you can understand the libfm commit by reading the bug report that lead to a similar change in Ubuntu Unity: bugs.launchpad.net/ubuntu/+source/update-manager/+bug/1020115 .
    – sourcejedi
    Dec 22 '18 at 20:22











  • @sourcejedi Thanks. See my suspicion.
    – Tim
    Dec 27 '18 at 17:41












  • 1




    Might help if you provide systemd version.
    – 炸鱼薯条德里克
    Dec 21 '18 at 5:23










  • what "version" did I provide?
    – Tim
    Dec 21 '18 at 12:55










  • +1. Odd. I must have read the code wrong, I thought it calls into libfm, but then the libfm function deliberately avoids this. See the 2015 commit github.com/lxde/libfm/commit/… The libfm commit description is very short, but you can understand the libfm commit by reading the bug report that lead to a similar change in Ubuntu Unity: bugs.launchpad.net/ubuntu/+source/update-manager/+bug/1020115 .
    – sourcejedi
    Dec 22 '18 at 20:22











  • @sourcejedi Thanks. See my suspicion.
    – Tim
    Dec 27 '18 at 17:41







1




1




Might help if you provide systemd version.
– 炸鱼薯条德里克
Dec 21 '18 at 5:23




Might help if you provide systemd version.
– 炸鱼薯条德里克
Dec 21 '18 at 5:23












what "version" did I provide?
– Tim
Dec 21 '18 at 12:55




what "version" did I provide?
– Tim
Dec 21 '18 at 12:55












+1. Odd. I must have read the code wrong, I thought it calls into libfm, but then the libfm function deliberately avoids this. See the 2015 commit github.com/lxde/libfm/commit/… The libfm commit description is very short, but you can understand the libfm commit by reading the bug report that lead to a similar change in Ubuntu Unity: bugs.launchpad.net/ubuntu/+source/update-manager/+bug/1020115 .
– sourcejedi
Dec 22 '18 at 20:22





+1. Odd. I must have read the code wrong, I thought it calls into libfm, but then the libfm function deliberately avoids this. See the 2015 commit github.com/lxde/libfm/commit/… The libfm commit description is very short, but you can understand the libfm commit by reading the bug report that lead to a similar change in Ubuntu Unity: bugs.launchpad.net/ubuntu/+source/update-manager/+bug/1020115 .
– sourcejedi
Dec 22 '18 at 20:22













@sourcejedi Thanks. See my suspicion.
– Tim
Dec 27 '18 at 17:41




@sourcejedi Thanks. See my suspicion.
– Tim
Dec 27 '18 at 17:41










0






active

oldest

votes











Your Answer








StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f490249%2fhow-does-altf2-run-a-command-as-child-of-the-init-process%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes















draft saved

draft discarded
















































Thanks for contributing an answer to Unix & Linux Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f490249%2fhow-does-altf2-run-a-command-as-child-of-the-init-process%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown






Popular posts from this blog

How to check contact read email or not when send email to Individual?

Displaying single band from multi-band raster using QGIS

How many registers does an x86_64 CPU actually have?