Linux 中是否有相当于killall 的C 库?

Linux 中是否有相当于killall 的C 库?

我想杀死与killall命令类似的其他应用程序,因为我知道应用程序但无法PID在运行时获取。

这必须用 C 代码完成。我知道,kill()但是需要PID。还有其他相当于killall的方法吗?

答案1

kill(2)是向进程发送信号的系统调用,没有与该实用程序等效killall的工具。

在 C 中执行此操作的一个简单方法是killall使用 system(3) 库函数或可能的 popen(3) 从 C 程序中调用。

或者,您可以阅读有关伪文件系统的手册页/proc并搜索命令名称并自行查找 pid。

man 2 kill
man 3 system
man 3 popen
man 5 proc

答案2

要回答标题中的问题,不存在可以执行此匹配的 C 库。甚至 libprocps 也没有这样做。

Killall 是一个简单的程序:

  • 找出你想要匹配的内容
  • 有效地在 /proc 上查找名称中仅包含数字的目录并与这些目录下的文件进行匹配

由于它是通用的(例如,它不知道用户事先将使用什么匹配标准),因此它有很多匹配项。你应该已经知道你想要匹配什么了。您的问题并没有真正说明,但听起来像是名称或命令行。

我真的很警告整个方法。进程应该真正确定它们正在接触哪些其他进程。名字是一个糟糕的匹配,因为我可以轻易地伪造它。还要考虑您可能有两个用户或两个系统使用相同的名称,应该终止哪个进程?

PID 文件或其他在程序启动时记录 PID 的方法要好得多,因为您确切地知道您正在谈论哪个进程(除非它们分叉)

正如 Richard 上面指出的,killall 代码是 GPL2+,因此您可以使用相同的许可证重复使用它。该项目已转移到 gitlab,目前位于https://gitlab.com/psmisc/psmisc

相关内容