|
Neohapsis is currently accepting applications for employment. For more information, please visit our website www.neohapsis.com or email hr@neohapsis.com |
ported Solaris' psig to OpenBSD
From: Steffen Wendzel (cdp_xe
gmx.net)
Date: Mon May 01 2006 - 14:58:13 CDT
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi,
I just ported Solaris' psig-tool to OpenBSD. I modified the pkill
code to do that (patch included). psig shows the signal settings
of a process.
examples:
------------------------snip---------------------------
cdp_xe
eygo:~/Mail$ psig cdpnntpd
command: cdpnntpd, pid: 7775
signal mask:
ignore mask: HUP(0) URG(15) TSTP(17) TTIN(20) TTOU(21) IO(22)
WINCH(27) INFO(28)
catch mask: INT(1) TERM(14) CHLD(19)
cdp_xe
eygo:~/Mail$ psig Xorg
command: Xorg, pid: 14254
signal mask:
ignore mask: URG(15) CHLD(19) IO(22) WINCH(27) INFO(28)
catch mask:
command: Xorg, pid: 21348
signal mask:
ignore mask: PIPE(12) URG(15) CHLD(19) TTIN(20) TTOU(21)
WINCH(27) INFO(28) USR1(29)
catch mask: HUP(0) INT(1) ILL(3) EMT(6) FPE(7) BUS(9) SEGV(10)
SYS(11) ALRM(13) TERM(14) IO(22) XCPU(23) XFSZ(24) USR2(30)
cdp_xe
eygo:~/Mail$ psig pland
command: pland, pid: 9833
signal mask:
ignore mask: PIPE(12) URG(15) CHLD(19) IO(22) WINCH(27) INFO(28)
catch mask: HUP(0) INT(1) QUIT(2) ILL(3) BUS(9) SEGV(10)
ALRM(13) TERM(14)
cdp_xe
eygo:~/Mail$ psig xconsole
command: xconsole, pid: 11506
signal mask:
ignore mask: URG(15) CHLD(19) IO(22) WINCH(27) INFO(28)
catch mask:
------------------------snap---------------------------
Here is the output of
# cvs diff Makefile pkill.1 pkill.c
------------------------snip---------------------------
Index: Makefile
===================================================================
RCS file: /cvs/src/usr.bin/pkill/Makefile,v
retrieving revision 1.1
diff -r1.1 Makefile
11a12
> LINKS+= ${BINDIR}/pkill ${BINDIR}/psig
12a14
> MLINKS+=pkill.1 psig.1
Index: pkill.1
===================================================================
RCS file: /cvs/src/usr.bin/pkill/pkill.1,v
retrieving revision 1.7
diff -r1.7 pkill.1
42,43c42,43
< .Nm pgrep , pkill
< .Nd find or signal processes by name
---
> .Nm pgrep , pkill , psig
> .Nd find, signal or show signal settings (of) processes by name
66a67,76
> .Nm psig
> .Op Fl fnvx
> .Op Fl G Ar gid
> .Op Fl g Ar pgrp
> .Op Fl P Ar ppid
> .Op Fl s Ar sid
> .Op Fl t Ar tty
> .Op Fl U Ar uid
> .Op Fl u Ar euid
> .Op Ar pattern ..
78a89,94
> The
> .Nm psig
> command searches the process table on the running system and shows the
> signal settings of all processes that match the criteria given on the
> command line.
> .Pp
198a215,221
> .Pp
> .Nm psig
> first appeared in
> .Ox 4.0 .
> It is modelled after a utility of the same name that is shipped with in Sun
> Solaris 8, but is not exactly the same.
>
201c224,227
< .Aq ad
NetBSD.org .
---
> .Aq ad
NetBSD.org ,
> .Pp
> .An Steffen Wendzel
> .Aq cdp
doomed-reality.org .
Index: pkill.c
===================================================================
RCS file: /cvs/src/usr.bin/pkill/pkill.c,v
retrieving revision 1.14
diff -r1.14 pkill.c
90a91
> int psig;
111a113
> int sigact(struct kinfo_proc2 *, int);
132a135,137
> } else if (strcmp(__progname, "psig") == 0) {
> action = sigact;
> psig = 1;
462a468,591
> return (0);
> }
>
> void
> print_signals(u_int32_t mask)
> {
> u_int32_t testmask;
> unsigned short n;
>
> for (testmask = 1, n = 0; n < 32; n++) {
> if (mask & (testmask << n)) {
> switch(n + 1) {
> case SIGHUP:
> printf("HUP(");
> break;
> case SIGINT:
> printf("INT(");
> break;
> case SIGQUIT:
> printf("QUIT(");
> break;
> case SIGILL:
> printf("ILL(");
> break;
> case SIGTRAP:
> printf("TRAP(");
> break;
> case SIGABRT:
> printf("ABRT(");
> break;
> case SIGEMT:
> printf("EMT(");
> break;
> case SIGFPE:
> printf("FPE(");
> break;
> case SIGBUS:
> printf("BUS(");
> break;
> case SIGSEGV:
> printf("SEGV(");
> break;
> case SIGSYS:
> printf("SYS(");
> break;
> case SIGPIPE:
> printf("PIPE(");
> break;
> case SIGALRM:
> printf("ALRM(");
> break;
> case SIGTERM:
> printf("TERM(");
> break;
> case SIGURG:
> printf("URG(");
> break;
> case SIGSTOP:
> printf("STOP(");
> break;
> case SIGTSTP:
> printf("TSTP(");
> break;
> case SIGCONT:
> printf("CONT(");
> break;
> case SIGCHLD:
> printf("CHLD(");
> break;
> case SIGTTIN:
> printf("TTIN(");
> break;
> case SIGTTOU:
> printf("TTOU(");
> break;
> case SIGIO:
> printf("IO(");
> break;
> case SIGXCPU:
> printf("XCPU(");
> break;
> case SIGXFSZ:
> printf("XFSZ(");
> break;
> case SIGVTALRM:
> printf("VTALRM(");
> break;
> case SIGPROF:
> printf("PROF(");
> break;
> case SIGWINCH:
> printf("WINCH(");
> break;
> case SIGINFO:
> printf("INFO(");
> break;
> case SIGUSR1:
> printf("USR1(");
> break;
> case SIGUSR2:
> printf("USR2(");
> break;
> default:
> printf("UNKNOWN(");
> break;
> }
> printf("%i) ", n);
> }
> }
> }
>
> int
> sigact(struct kinfo_proc2 *kp, int dummy)
> {
>
> printf("command: %s, pid: %i\n", kp->p_comm, (int)kp->p_pid);
> printf("\tsignal mask: ");
> print_signals(kp->p_sigmask);
> printf("\n\tignore mask: ");
> print_signals(kp->p_sigignore);
> printf("\n\tcatch mask: ");
> print_signals(kp->p_sigcatch);
> printf("\n");
>
------------------------snap---------------------------
It would be damn cool if this would be applied in the official source and
available in the next release.
-- steffen
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]