Как убить программы в том же каталоге в 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