Add a -P option to detach to HUP the client's parent process (usually

causing it to exit as well).
This commit is contained in:
Nicholas Marriott
2011-03-03 08:51:47 +00:00
parent ce91520e12
commit 7954126dcd
4 changed files with 31 additions and 7 deletions

View File

@ -36,6 +36,7 @@ struct imsgbuf client_ibuf;
struct event client_event;
const char *client_exitmsg;
int client_exitval;
enum msgtype client_exittype;
int client_attached;
int client_connect(char *, int);
@ -100,6 +101,7 @@ client_main(int argc, char **argv, int flags)
struct cmd_list *cmdlist;
struct msg_command_data cmddata;
int cmdflags, fd;
pid_t ppid;
enum msgtype msg;
char *cause;
@ -192,8 +194,14 @@ client_main(int argc, char **argv, int flags)
event_dispatch();
/* Print the exit message, if any, and exit. */
if (client_attached && client_exitmsg != NULL && !login_shell)
printf("[%s]\n", client_exitmsg);
if (client_attached) {
if (client_exitmsg != NULL && !login_shell)
printf("[%s]\n", client_exitmsg);
ppid = getppid();
if (client_exittype == MSG_DETACHKILL && ppid > 1)
kill(ppid, SIGHUP);
}
return (client_exitval);
}
@ -434,12 +442,17 @@ client_dispatch_attached(void)
log_debug("client got %d", imsg.hdr.type);
switch (imsg.hdr.type) {
case MSG_DETACHKILL:
case MSG_DETACH:
if (datalen != 0)
fatalx("bad MSG_DETACH size");
client_exittype = imsg.hdr.type;
if (imsg.hdr.type == MSG_DETACHKILL)
client_exitmsg = "detached and SIGHUP";
else
client_exitmsg = "detached";
client_write_server(MSG_EXITING, NULL, 0);
client_exitmsg = "detached";
break;
case MSG_EXIT:
if (datalen != 0 &&