Как убить программы в том же каталоге в Linux?

Я хочу убить все программы, работающие в той же директории, что и я. Мне нужно найти, какие программы работают прямо сейчас и убить их (и быть осторожным, чтобы не убить себя). Я запускаю свою программу в Ubuntu(Linux).

Мне нужно использовать эту команду:

int kill(pid_t pid, int sig);

Как я могу это сделать?

* Программы живут в одном каталоге.

1 ответ

Stricto sensu, твой вопрос не имеет смысла. К тому времени, когда вы получаете каталог процесса, он мог бы вызвать chdir(2), прежде чем убить его (и тогда вы не должны были его уничтожать).

В Linux для получения информации о процессах используйте proc (5). Так что используйте readdir(3) после opendir(3) на /proc/ (фильтровать только числовые каталоги, как /proc/1234/ что соответствует процессу пид 1234). Для каждого процесса используйте readlink(2) на /proc/1234/cwd чтобы получить его каталог (и на /proc/1234/exe чтобы получить его исполняемый файл, если это имеет значение). Используйте getcwd(2) и getpid(2), чтобы получить текущий каталог и текущий процесс.

Кстати, ваше kill(2) - это системный вызов (указанный в syscalls (2)), а не команда. Команда kill(1) обычно запускается из оболочки.

Вы должны прочитать http://advancedlinuxprogramming.com/.

Наконец, ваше желаемое поведение для уничтожения всех процессов, запущенных в вашем каталоге, крайне недружелюбно для пользователя. Так что, по крайней мере, документируйте это и, возможно, дайте какой-нибудь способ отключить это поведение. Более мягким способом было бы создать какой-нибудь временный каталог (используя mkdtemp (3)), затем chdir(2) в него (тогда, возможно, unlink(2) или rmdir (2) it).

Смотрите также pkill(1) и pgrep

Другие вопросы по тегам