有没有一种方法,在linux中使用C,关闭另一个应用程序



我想制作一个程序,它可以阻止一些程序打开,或者在它们启动后停止它们。我只能用C编写代码,还想添加一个GUI,所以我不能使用bash和kill。有没有办法从C关闭另一个程序?

我想基本上创建一个";"延时";所以我不能在上学期间开始minecraft。

我想让代码尽可能高效,但一直找不到任何工具,比如一项服务,可以有效地关闭应用程序或阻止它们启动。

所以我们要做的是定位流程并对其进行kill()。这并不难。它很长,因为可执行文件不是minecraft,而是java,所以我们要查找.jar文件。

#include <stdlib.h>
#include <dirent.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
void kill_minecraft()
{
char buf[8192];
DIR *dir = opendir("/proc");
struct dirent *dirent;
while ((dirent = readdir(dir)))
{
pid_t pid = atol(dirent->d_name);
if (pid > 0)
{
sprintf(buf, "/proc/%s/cmdline", dirent->d_name);
FILE *in = fopen(buf, "r");
if (in)
{
size_t nmem = fread(buf, 1, 8192, in);
fclose(in);
buf[8192] = 0;
// Recognize minecraft's jar in the command line
if (nmem > 0 && (char *ptr = (char*)memmem(buf, "minecraft/versions/", nmem)))
{
char *p1 = (char*)strstr(ptr, ":");
char *p2 = (char*)strstr(ptr, ".jar");
if (p2 && (!p1 || p1 > p2))
{
// Match! Goodbye!
kill(pid, 9);
}
}
fclose(in);
}
}
}
closedir(dir);
}

Whew。让我们把它分解一下。此函数遍历所有正在运行的进程,并在其命令行中进行读取。一旦完成,它就会检查命令行中minecraft的模式;它有一个命令行参数minecraft/versions/msomething/something.jar。在java中,jar参数用:字符分隔在一起,所以它可以处理这个问题。一旦得到匹配,它就会调用kill

安排此功能留给读者练习。参见time()sleep()功能。至于运行它,懒惰的方法是将对它的调用粘贴到/etc/rc.local中。

您可以在循环中使用pkill -f来完成此操作,但regex很难编写,我不想弄清楚。

相关内容

最新更新