How does Alt+F2 run a command as child of the init process?
Clash Royale CLAN TAG#URR8PPP
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
add a comment |
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
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
add a comment |
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
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
desktop-environment
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
add a comment |
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
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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