【问题标题】:kill process from the same directory从同一目录杀死进程
【发布时间】:2026-02-03 17:00:01
【问题描述】:

我正在参加一场比赛,在这场比赛中,我需要杀死与我的程序在同一目录中运行的进程。编程语言无关紧要,它可以是在 linux 上运行的任何语言,我选择 C ​​是因为它是我最了解的语言(如果你有其他语言可以做到这一点,我会很高兴听到)。

我知道我可以使用 kill 函数杀死进程,但我不知道如何获取目录中进程的 id 并杀死他。 另外我的程序需要保护自己,不要被杀。

我怎样才能以最好的方式做这样的事情?

【问题讨论】:

  • 您对“在同一目录中”运行的进程到底是什么意思?您的意思是要遍历您的程序所在的目录并杀死该目录中可以找到的所有正在运行的程序实例吗?你需要更具体。
  • 我的意思是所有程序都位于 tmp 目录中,包括我的程序,我需要像上面解释的那样从它们中杀死它们。
  • 您的问题没有说明您所指的进程和目录之间的关系 - 请改进它。 用于创建/启动进程的二进制文件驻留在目录中。这就是“与我在同一目录中运行的进程”的意思吗?其他可能的关系是进程 pid 文件,它通常位于 /proc 内的子目录中,或者可能是程序用作 chroot 环境的目录。

标签: c linux file process


【解决方案1】:

如果您需要杀死在同一目录中启动的程序,您可以使用/proc 文件夹来确定。

pwd=$(readlink -f .)
cd /proc
for i in *; do
  [ "$(readlink -f $i/cwd)" == "$pwd" ] && kill $i;
done

【讨论】:

  • cwd 是当前工作目录。打开一个shell,找出它的PID,然后cd进入另一个目录,观察进程的cwd链接变化。 exe 可能是你想要的(我的意思是你想要它的dirname)。
  • @DarkDust,这取决于您如何解释@jweyrich 指出的问题。如果您想查找在文件夹中运行的程序,那么它们就是将cwd 设置为该文件夹的程序。如果您想从该文件夹中查找正在运行的程序,那就是exe