summaryrefslogtreecommitdiffstats
path: root/usr.bin/pkill
diff options
context:
space:
mode:
authorgad <gad@FreeBSD.org>2004-03-25 21:58:56 +0000
committergad <gad@FreeBSD.org>2004-03-25 21:58:56 +0000
commit4200a71a9f6309013cb37b2752418eec10306c8f (patch)
treeff900f446b40bc093827e4fb5b63a625875f40b0 /usr.bin/pkill
parentea15b55852a08429be710dc128bc5381fc0685c3 (diff)
downloadFreeBSD-src-4200a71a9f6309013cb37b2752418eec10306c8f.zip
FreeBSD-src-4200a71a9f6309013cb37b2752418eec10306c8f.tar.gz
Change some routine and variable names to match the FreeBSD system.
Written by: Mario Sergio Fujikawa Ferreira <lioux@FreeBSD.org> Obtained from: the sysutils/pkill port
Diffstat (limited to 'usr.bin/pkill')
-rw-r--r--usr.bin/pkill/Makefile4
-rw-r--r--usr.bin/pkill/pkill.c86
2 files changed, 55 insertions, 35 deletions
diff --git a/usr.bin/pkill/Makefile b/usr.bin/pkill/Makefile
index fec4fd8..3f93572 100644
--- a/usr.bin/pkill/Makefile
+++ b/usr.bin/pkill/Makefile
@@ -4,10 +4,14 @@
PROG= pkill
SRCS= pkill.c
MAN= pkill.1
+WARNS?= 1
LDADD+= -lkvm
DPADD+= ${LIBKVM}
+#BINGRP= kmem
+#BINMODE= 2555
+
LINKS+= ${BINDIR}/pkill ${BINDIR}/pgrep
MLINKS+=pkill.1 pgrep.1
diff --git a/usr.bin/pkill/pkill.c b/usr.bin/pkill/pkill.c
index dc52eb3..98cd8bc 100644
--- a/usr.bin/pkill/pkill.c
+++ b/usr.bin/pkill/pkill.c
@@ -45,15 +45,18 @@ __FBSDID("$FreeBSD$");
#include <sys/proc.h>
#include <sys/queue.h>
#include <sys/stat.h>
+#include <sys/user.h>
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
+#include <paths.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <regex.h>
#include <ctype.h>
+#include <fcntl.h>
#include <kvm.h>
#include <err.h>
#include <pwd.h>
@@ -65,6 +68,12 @@ __FBSDID("$FreeBSD$");
#define STATUS_BADUSAGE 2
#define STATUS_ERROR 3
+#if defined(__FreeBSD__)
+# if __FreeBSD_version < 300000
+# define NEED_KMEM
+# endif
+#endif
+
enum listtype {
LT_GENERIC,
LT_USER,
@@ -81,7 +90,7 @@ struct list {
SLIST_HEAD(listhead, list);
-struct kinfo_proc2 *plist;
+struct kinfo_proc *plist;
char *selected;
char *delim = "\n";
int nproc;
@@ -105,8 +114,8 @@ struct listhead sidlist = SLIST_HEAD_INITIALIZER(list);
int main(int, char **);
void usage(void);
-void killact(struct kinfo_proc2 *);
-void grepact(struct kinfo_proc2 *);
+void killact(struct kinfo_proc *);
+void grepact(struct kinfo_proc *);
void makelist(struct listhead *, enum listtype, char *);
int
@@ -115,9 +124,10 @@ main(int argc, char **argv)
extern char *optarg;
extern int optind;
char buf[_POSIX2_LINE_MAX], *mstr, **pargv, *p, *q;
+ char *execf, *coref, *swapf;
int i, j, ch, bestidx, rv, criteria;
- void (*action)(struct kinfo_proc2 *);
- struct kinfo_proc2 *kp;
+ void (*action)(struct kinfo_proc *);
+ struct kinfo_proc *kp;
struct list *li;
u_int32_t bestsec, bestusec;
regex_t reg;
@@ -152,6 +162,12 @@ main(int argc, char **argv)
}
}
+#if defined(NEED_KMEM)
+ execf = coref = swapf = NULL;
+#else
+ execf = coref = swapf = _PATH_DEVNULL;
+#endif
+
criteria = 0;
while ((ch = getopt(argc, argv, "G:P:U:d:fg:lns:t:u:vx")) != -1)
@@ -224,13 +240,13 @@ main(int argc, char **argv)
/*
* Retrieve the list of running processes from the kernel.
*/
- kd = kvm_openfiles(NULL, NULL, NULL, KVM_NO_FILES, buf);
+ kd = kvm_openfiles(execf, coref, swapf, O_RDONLY, buf);
if (kd == NULL)
errx(STATUS_ERROR, "kvm_openfiles(): %s", buf);
- plist = kvm_getproc2(kd, KERN_PROC_ALL, 0, sizeof(*plist), &nproc);
+ plist = kvm_getprocs(kd, KERN_PROC_ALL, 0, &nproc);
if (plist == NULL)
- errx(STATUS_ERROR, "kvm_getproc2() failed");
+ errx(STATUS_ERROR, "kvm_getprocs() failed");
/*
* Allocate memory which will be used to keep track of the
@@ -250,11 +266,11 @@ main(int argc, char **argv)
}
for (i = 0, kp = plist; i < nproc; i++, kp++) {
- if ((kp->p_flag & P_SYSTEM) != 0 || kp->p_pid == mypid)
+ if ((kp->ki_flag & P_SYSTEM) != 0 || kp->ki_pid == mypid)
continue;
if (matchargs) {
- if ((pargv = kvm_getargv2(kd, kp, 0)) == NULL)
+ if ((pargv = kvm_getargv(kd, kp, 0)) == NULL)
continue;
j = 0;
@@ -267,7 +283,7 @@ main(int argc, char **argv)
mstr = buf;
} else
- mstr = kp->p_comm;
+ mstr = kp->ki_comm;
rv = regexec(&reg, mstr, 1, &regmatch, 0);
if (rv == 0) {
@@ -287,11 +303,11 @@ main(int argc, char **argv)
}
for (i = 0, kp = plist; i < nproc; i++, kp++) {
- if ((kp->p_flag & P_SYSTEM) != 0)
+ if ((kp->ki_flag & P_SYSTEM) != 0)
continue;
SLIST_FOREACH(li, &ruidlist, li_chain)
- if (kp->p_ruid == (uid_t)li->li_number)
+ if (kp->ki_ruid == (uid_t)li->li_number)
break;
if (SLIST_FIRST(&ruidlist) != NULL && li == NULL) {
selected[i] = 0;
@@ -299,7 +315,7 @@ main(int argc, char **argv)
}
SLIST_FOREACH(li, &rgidlist, li_chain)
- if (kp->p_rgid == (gid_t)li->li_number)
+ if (kp->ki_rgid == (gid_t)li->li_number)
break;
if (SLIST_FIRST(&rgidlist) != NULL && li == NULL) {
selected[i] = 0;
@@ -307,7 +323,7 @@ main(int argc, char **argv)
}
SLIST_FOREACH(li, &euidlist, li_chain)
- if (kp->p_uid == (uid_t)li->li_number)
+ if (kp->ki_uid == (uid_t)li->li_number)
break;
if (SLIST_FIRST(&euidlist) != NULL && li == NULL) {
selected[i] = 0;
@@ -315,7 +331,7 @@ main(int argc, char **argv)
}
SLIST_FOREACH(li, &ppidlist, li_chain)
- if (kp->p_ppid == (uid_t)li->li_number)
+ if (kp->ki_ppid == (uid_t)li->li_number)
break;
if (SLIST_FIRST(&ppidlist) != NULL && li == NULL) {
selected[i] = 0;
@@ -323,7 +339,7 @@ main(int argc, char **argv)
}
SLIST_FOREACH(li, &pgrplist, li_chain)
- if (kp->p__pgid == (uid_t)li->li_number)
+ if (kp->ki_pgid == (uid_t)li->li_number)
break;
if (SLIST_FIRST(&pgrplist) != NULL && li == NULL) {
selected[i] = 0;
@@ -332,9 +348,9 @@ main(int argc, char **argv)
SLIST_FOREACH(li, &tdevlist, li_chain) {
if (li->li_number == -1 &&
- (kp->p_flag & P_CONTROLT) == 0)
+ (kp->ki_flag & P_CONTROLT) == 0)
break;
- if (kp->p_tdev == (uid_t)li->li_number)
+ if (kp->ki_tdev == (uid_t)li->li_number)
break;
}
if (SLIST_FIRST(&tdevlist) != NULL && li == NULL) {
@@ -343,7 +359,7 @@ main(int argc, char **argv)
}
SLIST_FOREACH(li, &sidlist, li_chain)
- if (kp->p_sid == (uid_t)li->li_number)
+ if (kp->ki_sid == (uid_t)li->li_number)
break;
if (SLIST_FIRST(&sidlist) != NULL && li == NULL) {
selected[i] = 0;
@@ -363,11 +379,11 @@ main(int argc, char **argv)
if (!selected[i])
continue;
- if (kp->p_ustart_sec > bestsec ||
- (kp->p_ustart_sec == bestsec
- && kp->p_ustart_usec > bestusec)) {
- bestsec = kp->p_ustart_sec;
- bestusec = kp->p_ustart_usec;
+ if (kp->ki_start.tv_sec > bestsec ||
+ (kp->ki_start.tv_sec == bestsec
+ && kp->ki_start.tv_usec> bestusec)) {
+ bestsec = kp->ki_start.tv_sec;
+ bestusec = kp->ki_start.tv_usec;
bestidx = i;
}
}
@@ -381,7 +397,7 @@ main(int argc, char **argv)
* Take the appropriate action for each matched process, if any.
*/
for (i = 0, rv = 0, kp = plist; i < nproc; i++, kp++) {
- if (kp->p_pid == mypid)
+ if (kp->ki_pid == mypid)
continue;
if (selected[i]) {
if (inverse)
@@ -389,7 +405,7 @@ main(int argc, char **argv)
} else if (!inverse)
continue;
- if ((kp->p_flag & P_SYSTEM) != 0)
+ if ((kp->ki_flag & P_SYSTEM) != 0)
continue;
rv = 1;
@@ -418,32 +434,32 @@ usage(void)
}
void
-killact(struct kinfo_proc2 *kp)
+killact(struct kinfo_proc *kp)
{
- if (kill(kp->p_pid, signum) == -1)
- err(STATUS_ERROR, "signalling pid %d", (int)kp->p_pid);
+ if (kill(kp->ki_pid, signum) == -1)
+ err(STATUS_ERROR, "signalling pid %d", (int)kp->ki_pid);
}
void
-grepact(struct kinfo_proc2 *kp)
+grepact(struct kinfo_proc *kp)
{
char **argv;
if (longfmt && matchargs) {
- if ((argv = kvm_getargv2(kd, kp, 0)) == NULL)
+ if ((argv = kvm_getargv(kd, kp, 0)) == NULL)
return;
- printf("%d ", (int)kp->p_pid);
+ printf("%d ", (int)kp->ki_pid);
for (; *argv != NULL; argv++) {
printf("%s", *argv);
if (argv[1] != NULL)
putchar(' ');
}
} else if (longfmt)
- printf("%d %s", (int)kp->p_pid, kp->p_comm);
+ printf("%d %s", (int)kp->ki_pid, kp->ki_comm);
else
- printf("%d", (int)kp->p_pid);
+ printf("%d", (int)kp->ki_pid);
printf("%s", delim);
}
OpenPOWER on IntegriCloud