On Tue, 23 August 2011 Oleg Nesterov <oleg@xxxxxxxxxx> wrote: > On 08/23, Greg Kurz wrote: > > > > On Tue, 2011-08-23 at 15:33 +0200, Oleg Nesterov wrote: > > > [...] > > > At least now I understand why did you mention si_code/CLD before. You > > > meant waitid(). I thought you were talking about the death-notifications > > > which can't report CLD_ you need. > > > > > > I strongly object. We shouldn't uglify wait_task_zombie() to solve the > > > very specific problem. > > > > > > And once again. sub_init->parent does wiat(&status) and sees > > > WIFSIGNALED() && WTERMSIG(status) == SIGHUP. This can only mean that > > > sys_reboot(LINUX_REBOOT_CMD_RESTART) was called. It _can not_ be really > > > killed by SIGHUP, it must be CMD_RESTART. > > > > > > Why this can't work? Why do you want the additional complications? > > > > > > > I don't see either what could go wrong with you approach. > > Thanks ;) > > Just in case... instead of WIFSIGNALED/WTERMSIG we can also report > the exit code in the upper bits. I mean, > > switch (reboot_cmd) { > case LINUX_REBOOT_CMD_RESTART: > code = 1 << 16; > break; > case LINUX_REBOOT_CMD_HALT: > code = 2 << 16; > break; > } That looks nice and simple! > this can't be confused with the normal exit(code), just the parent > should be careful, I am not sure this can't confuse WIFEXITED/WEXITSTATUS > user-space macroses. For recent glibc (2.12.2): sys/wait.h and stdlib.h: # define WIFEXITED(status) __WIFEXITED (__WAIT_INT (status)) # define WEXITSTATUS(status) __WEXITSTATUS (__WAIT_INT (status)) bits/waitstatus.h: #define __WIFEXITED(status) (__WTERMSIG(status) == 0) #define __WTERMSIG(status) ((status) & 0x7f) #define __WEXITSTATUS(status) (((status) & 0xff00) >> 8) For this version of glibc on x86 and amd64 it looks fine. Would have to look at other versions and other libcs to make sure there are no surprises. Bruno > wait(&status) takes "int *", we have a room for additional info, and > wait_task_zombie() simply copies exit_code. > > Oleg. > _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers