11 int main(int argc, char *argv[])
20 fprintf(stderr,"%s: <directory>\n", argv[0]);
26 /* make it absolute */
27 if (directory[0] != '/') {
28 char *cwd = getcwd(buf, sizeof(buf));
33 asprintf(&directory, "%s/%s", cwd, directory);
36 /* resolve links etc */
37 directory = realpath(directory, buf);
39 if (directory == NULL) {
44 directory_len = strlen(directory);
52 while ((de = readdir(d))) {
53 const char *name = de->d_name;
54 char *cwd_path, *real_cwd;
55 char cwd[PATH_MAX], buf2[PATH_MAX];
58 if (!isdigit(name[0])) continue;
59 asprintf(&cwd_path, "/proc/%s/cwd", name);
60 link_size = readlink(cwd_path, cwd, sizeof(cwd));
62 if (link_size == -1 || link_size >= sizeof(cwd)) {
66 real_cwd = realpath(cwd, buf2);
67 if (real_cwd == NULL) {
71 if (strncmp(directory, real_cwd, directory_len) == 0 &&
72 (real_cwd[directory_len] == 0 || real_cwd[directory_len] == '/')) {
74 printf("Killing process %s\n", name);
75 kill(atoi(name), SIGKILL);