mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Sync OpenBSD patchset 863:
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:
		
							
								
								
									
										21
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								client.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: client.c,v 1.101 2011-01-21 23:44:13 tcunha Exp $ */
 | 
			
		||||
/* $Id: client.c,v 1.102 2011-03-19 23:27:35 tcunha Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -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;
 | 
			
		||||
 | 
			
		||||
@@ -194,8 +196,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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -436,12 +444,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 &&
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: cmd-detach-client.c,v 1.12 2011-01-07 14:45:34 tcunha Exp $ */
 | 
			
		||||
/* $Id: cmd-detach-client.c,v 1.13 2011-03-19 23:27:35 tcunha Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -28,8 +28,8 @@ int	cmd_detach_client_exec(struct cmd *, struct cmd_ctx *);
 | 
			
		||||
 | 
			
		||||
const struct cmd_entry cmd_detach_client_entry = {
 | 
			
		||||
	"detach-client", "detach",
 | 
			
		||||
	"t:", 0, 0,
 | 
			
		||||
	CMD_TARGET_CLIENT_USAGE,
 | 
			
		||||
	"t:P", 0, 0,
 | 
			
		||||
	"[-P] " CMD_TARGET_CLIENT_USAGE,
 | 
			
		||||
	CMD_READONLY,
 | 
			
		||||
	NULL,
 | 
			
		||||
	NULL,
 | 
			
		||||
@@ -45,7 +45,10 @@ cmd_detach_client_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
	if ((c = cmd_find_client(ctx, args_get(args, 't'))) == NULL)
 | 
			
		||||
		return (-1);
 | 
			
		||||
 | 
			
		||||
	server_write_client(c, MSG_DETACH, NULL, 0);
 | 
			
		||||
	if (args_has(args, 'P'))
 | 
			
		||||
		server_write_client(c, MSG_DETACHKILL, NULL, 0);
 | 
			
		||||
	else
 | 
			
		||||
		server_write_client(c, MSG_DETACH, NULL, 0);
 | 
			
		||||
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								tmux.1
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
.\" $Id: tmux.1,v 1.295 2011-01-21 23:55:26 tcunha Exp $
 | 
			
		||||
.\" $Id: tmux.1,v 1.296 2011-03-19 23:27:35 tcunha Exp $
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
.\"
 | 
			
		||||
@@ -554,10 +554,17 @@ If no server is started,
 | 
			
		||||
.Ic attach-session
 | 
			
		||||
will attempt to start it; this will fail unless sessions are created in the
 | 
			
		||||
configuration file.
 | 
			
		||||
.It Ic detach-client Op Fl t Ar target-client
 | 
			
		||||
.It Xo Ic detach-client
 | 
			
		||||
.Op Fl P
 | 
			
		||||
.Op Fl t Ar target-client
 | 
			
		||||
.Xc
 | 
			
		||||
.D1 (alias: Ic detach )
 | 
			
		||||
Detach the current client if bound to a key, or the specified client with
 | 
			
		||||
.Fl t .
 | 
			
		||||
If
 | 
			
		||||
.Fl P
 | 
			
		||||
is given, send SIGHUP to the parent process of the client, typically causing it
 | 
			
		||||
to exit.
 | 
			
		||||
.It Ic has-session Op Fl t Ar target-session
 | 
			
		||||
.D1 (alias: Ic has )
 | 
			
		||||
Report an error and exit with 1 if the specified session does not exist.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: tmux.h,v 1.610 2011-02-15 15:20:03 tcunha Exp $ */
 | 
			
		||||
/* $Id: tmux.h,v 1.611 2011-03-19 23:27:35 tcunha Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -371,6 +371,7 @@ enum msgtype {
 | 
			
		||||
	MSG_SHELL,
 | 
			
		||||
	MSG_STDERR,
 | 
			
		||||
	MSG_STDOUT,
 | 
			
		||||
	MSG_DETACHKILL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user