我想杀死与我在同一目录中运行的所有程序。 我需要找到现在正在运行的程序并杀死它们(并且要小心不要自杀)。 我在Ubuntu(Linux)中运行我的程序。
我需要使用这个命令:
int kill(pid_t pid, int sig);
我怎么做?
*这些程序位于同一目录中。
答案 0 :(得分:2)
Stricto sensu,你的问题没有意义。当你获得进程的目录时,它可能在你杀死它之前调用chdir(2)(然后你不应该杀死它)。
在Linux上,要获取有关进程的信息,请使用proc(5)。因此,在/proc/
/proc/1234/
之后使用readdir(3)(仅过滤数字目录,如/proc/1234/cwd
,对应于pid 1234的过程)。对于每个进程,使用/proc/1234/exe
上的opendir(3)来获取其目录(如果有问题,则使用pgrep
获取其可执行文件)。使用readlink(2)和getcwd(2)获取当前目录和当前进程。
顺便说一句,您的getpid(2)是kill(2)(在syscall中列出),而不是命令。命令syscalls(2)通常从shell运行。
您应该阅读kill(1)。
最后,您希望杀死目录中运行的每个进程的行为对用户来说非常不友好。所以至少要记录它,并且可能会给某种方法来禁用这种行为。更温和的方法是将一些临时目录(使用Advanced Linux Programming)然后mkdtemp(3)加入其中(然后可能是chdir(2)或unlink(2))
另请参阅rmdir(2)和{{1}}