14 int main(int argc, char *argv[])
23 fprintf(stderr,"%s: <directory>\n", argv[0]);
29 /* make it absolute */
30 if (directory[0] != '/') {
31 char *cwd = getcwd(buf, sizeof(buf));
38 /* Add 2 for / + \0 */
39 len = strlen(cwd) + strlen(directory) +2;
40 dir = (char*)malloc(len * sizeof(char));
41 sprintf(dir, "%s/%s", cwd, directory);
46 /* resolve links etc */
47 directory = realpath(directory, buf);
49 if (directory == NULL) {
54 directory_len = strlen(directory);
62 while ((de = readdir(d))) {
63 const char *name = de->d_name;
64 char *cwd_path, *real_cwd;
65 char cwd[PATH_MAX], buf2[PATH_MAX];
69 if (!isdigit(name[0])) continue;
71 len = strlen(name) + strlen("/proc//path/cwd") + 1;
72 cwd_path = (char*)malloc(len * sizeof(char));
73 sprintf(cwd_path, "/proc/%s/path/cwd", name);
75 len = strlen(name) + strlen("/proc//cwd") + 1;
76 cwd_path = (char*)malloc(len * sizeof(char));
77 sprintf(cwd_path, "/proc/%s/cwd", name);
79 cwd_path[len - 1] = '\0';
80 link_size = readlink(cwd_path, cwd, sizeof(cwd));
82 if (link_size == -1 || link_size >= sizeof(cwd)) {
86 cwd[link_size] = '\0';
87 real_cwd = realpath(cwd, buf2);
88 if (real_cwd == NULL) {
92 if (strncmp(directory, real_cwd, directory_len) == 0 &&
93 (real_cwd[directory_len] == 0 || real_cwd[directory_len] == '/')) {
95 printf("Killing process %s\n", name);
96 kill(atoi(name), SIGKILL);