From 18f4905e62e1fb2042abd79b2a4c756187e3d506 Mon Sep 17 00:00:00 2001 From: taiyu Date: Thu, 8 Oct 2015 08:12:31 -0700 Subject: #187, let init handle child processes --- sway/commands.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'sway/commands.c') diff --git a/sway/commands.c b/sway/commands.c index 03c682d7..2358b9e9 100644 --- a/sway/commands.c +++ b/sway/commands.c @@ -9,6 +9,7 @@ #include #include #include +#include #include "stringop.h" #include "layout.h" #include "focus.h" @@ -190,18 +191,25 @@ static enum cmd_status cmd_exec_always(int argc, char **argv) { char cmd[4096]; strcpy(cmd, tmp); free(tmp); - - char *args[] = {"sh", "-c", cmd, 0 }; sway_log(L_DEBUG, "Executing %s", cmd); pid_t pid; + // Fork process if ((pid = fork()) == 0) { - execv("/bin/sh", args); - _exit(-1); + // Fork child process again + setsid(); + if (fork() == 0) { + execl("/bin/sh", "/bin/sh", "-c", cmd, (void *)NULL); + /* Not reached */ + } + // Close child process + _exit(0); } else if (pid < 0) { sway_log(L_ERROR, "exec command failed, sway could not fork"); return CMD_FAILURE; } + // cleanup child process + wait(0); return CMD_SUCCESS; } -- cgit v1.2.3