Add primitive pidof(8)
This commit is contained in:
parent
481d4fefb0
commit
6a56bdf4ca
2
Makefile
2
Makefile
@ -11,6 +11,7 @@ LIB = \
|
|||||||
util/estrtol.o \
|
util/estrtol.o \
|
||||||
util/grabmntinfo.o \
|
util/grabmntinfo.o \
|
||||||
util/proc.o \
|
util/proc.o \
|
||||||
|
util/putword.o \
|
||||||
util/recurse.o \
|
util/recurse.o \
|
||||||
util/tty.o
|
util/tty.o
|
||||||
|
|
||||||
@ -27,6 +28,7 @@ SRC = \
|
|||||||
mkswap.c \
|
mkswap.c \
|
||||||
mount.c \
|
mount.c \
|
||||||
mountpoint.c \
|
mountpoint.c \
|
||||||
|
pidof.c \
|
||||||
pivot_root.c \
|
pivot_root.c \
|
||||||
ps.c \
|
ps.c \
|
||||||
reboot.c \
|
reboot.c \
|
||||||
|
64
pidof.c
Normal file
64
pidof.c
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/* See LICENSE file for copyright and license details. */
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <libgen.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "proc.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
eprintf("usage: %s [program...]\n", argv0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
DIR *dp;
|
||||||
|
struct dirent *entry;
|
||||||
|
pid_t pid;
|
||||||
|
struct procstat ps;
|
||||||
|
char cmdline[PATH_MAX], *cmd, *p;
|
||||||
|
int i, found = 0;
|
||||||
|
|
||||||
|
ARGBEGIN {
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
} ARGEND;
|
||||||
|
|
||||||
|
if (!argc)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
if (!(dp = opendir("/proc")))
|
||||||
|
eprintf("opendir /proc:");
|
||||||
|
|
||||||
|
while ((entry = readdir(dp))) {
|
||||||
|
if (!pidfile(entry->d_name))
|
||||||
|
continue;
|
||||||
|
for (i = 0; i < argc; i++) {
|
||||||
|
pid = estrtol(entry->d_name, 10);
|
||||||
|
parsestat(pid, &ps);
|
||||||
|
if (parsecmdline(ps.pid, cmdline,
|
||||||
|
sizeof(cmdline)) < 0) {
|
||||||
|
cmd = ps.comm;
|
||||||
|
} else {
|
||||||
|
if ((p = strchr(cmdline, ' ')))
|
||||||
|
*p = '\0';
|
||||||
|
cmd = basename(cmdline);
|
||||||
|
}
|
||||||
|
if (strcmp(cmd, argv[i]) == 0) {
|
||||||
|
putword(entry->d_name);
|
||||||
|
found++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (found)
|
||||||
|
putchar('\n');
|
||||||
|
|
||||||
|
closedir(dp);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
1
util.h
1
util.h
@ -12,5 +12,6 @@ void devtotty(int dev, int *tty_maj, int *tty_min);
|
|||||||
void enprintf(int, const char *, ...);
|
void enprintf(int, const char *, ...);
|
||||||
void eprintf(const char *, ...);
|
void eprintf(const char *, ...);
|
||||||
long estrtol(const char *, int);
|
long estrtol(const char *, int);
|
||||||
|
void putword(const char *);
|
||||||
void recurse(const char *, void (*)(const char *));
|
void recurse(const char *, void (*)(const char *));
|
||||||
char *ttytostr(int tty_maj, int tty_min);
|
char *ttytostr(int tty_maj, int tty_min);
|
||||||
|
18
util/putword.c
Normal file
18
util/putword.c
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/* See LICENSE file for copyright and license details. */
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "../util.h"
|
||||||
|
|
||||||
|
void
|
||||||
|
putword(const char *s)
|
||||||
|
{
|
||||||
|
static bool first = true;
|
||||||
|
|
||||||
|
if(!first)
|
||||||
|
putchar(' ');
|
||||||
|
|
||||||
|
fputs(s, stdout);
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user