xref: /titanic_52/usr/src/cmd/killall/killall.c (revision d14abf155341d55053c76eeec58b787a456b753b)
1  /*
2   * CDDL HEADER START
3   *
4   * The contents of this file are subject to the terms of the
5   * Common Development and Distribution License, Version 1.0 only
6   * (the "License").  You may not use this file except in compliance
7   * with the License.
8   *
9   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10   * or http://www.opensolaris.org/os/licensing.
11   * See the License for the specific language governing permissions
12   * and limitations under the License.
13   *
14   * When distributing Covered Code, include this CDDL HEADER in each
15   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16   * If applicable, add the following below this CDDL HEADER, with the
17   * fields enclosed by brackets "[]" replaced with your own identifying
18   * information: Portions Copyright [yyyy] [name of copyright owner]
19   *
20   * CDDL HEADER END
21   */
22  /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
23  /*	  All Rights Reserved  	*/
24  
25  
26  /*
27   * Copyright (c) 1998 by Sun Microsystems, Inc.
28   * All rights reserved.
29   */
30  #ident	"%Z%%M%	%I%	%E% SMI"	/* SVr4.0 1.21	*/
31  
32  #include <sys/types.h>
33  #include <signal.h>
34  #include <errno.h>
35  #include <utmpx.h>
36  #include <stdio.h>
37  #include <unistd.h>
38  
39  int
40  main(int argc, char *argv[])
41  {
42  	int sig;
43  	struct utmpx *u;
44  	char usage[] = "usage: killall [signal]\n";
45  	char perm[] = "permission denied\n";
46  
47  	if (geteuid() != 0) {
48  		(void) write(2, perm, sizeof (perm)-1);
49  		return (1);
50  	}
51  	switch (argc) {
52  		case 1:
53  			sig = SIGTERM;
54  			break;
55  		case 2:
56  			if (str2sig(argv[1], &sig) == 0)
57  				break;
58  		default:
59  			(void) write(2, usage, sizeof (usage)-1);
60  			return (1);
61  	}
62  
63  	while ((u = getutxent()) != NULL) {
64  		if ((u->ut_type == LOGIN_PROCESS) ||
65  		    (u->ut_type == USER_PROCESS))
66  			(void) kill(u->ut_pid, sig);
67  	}
68  	endutxent();
69  
70  	return (0);
71  }
72