在C语言中,如何以编程方式找出Linux / Ubuntu上是否已在运行某个进程,以避免该进程两次启动?我正在寻找类似于pidof的东西。
您可以进入这些pid
条目/proc
并在cmdline
文件中检查过程,也可以readlink
在exe
链接上执行操作(以下使用第一种方法)。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <dirent.h>
#include <sys/types.h>
pid_t proc_find(const char* name)
{
DIR* dir;
struct dirent* ent;
char* endptr;
char buf[512];
if (!(dir = opendir("/proc"))) {
perror("can't open /proc");
return -1;
}
while((ent = readdir(dir)) != NULL) {
/* if endptr is not a null character, the directory is not
* entirely numeric, so ignore it */
long lpid = strtol(ent->d_name, &endptr, 10);
if (*endptr != '\0') {
continue;
}
/* try to open the cmdline file */
snprintf(buf, sizeof(buf), "/proc/%ld/cmdline", lpid);
FILE* fp = fopen(buf, "r");
if (fp) {
if (fgets(buf, sizeof(buf), fp) != NULL) {
/* check the first token in the file, the program name */
char* first = strtok(buf, " ");
if (!strcmp(first, name)) {
fclose(fp);
closedir(dir);
return (pid_t)lpid;
}
}
fclose(fp);
}
}
closedir(dir);
return -1;
}
int main(int argc, char* argv[])
{
if (argc == 1) {
fprintf("usage: %s name1 name2 ...\n", argv[0]);
return 1;
}
int i;
for(int i = 1; i < argc; ++i) {
pid_t pid = proc_find(argv[i]);
if (pid == -1) {
printf("%s: not found\n", argv[i]);
} else {
printf("%s: %d\n", argv[i], pid);
}
}
return 0;
}
问题内容: 如何检查Glassfish DAS是否以编程方式运行,即使已将其部署在本地计算机还是远程计算机上? 使用Java6 问题答案: 我找到了一种方法来检查DAS是否已启动,而不是Linux脚本。通过这种方式,我的应用程序和DAS都在同一台计算机上还是每台安装在不同的计算机上都没有关系。 }
问题内容: 正如问题所指出的那样,我主要想知道我的代码是否正在模拟器中运行,但也想知道正在运行或正在模拟的特定iphone版本。 编辑:我在问题名称中添加了“以编程方式”一词。我的问题的关键是能够根据正在运行的版本/模拟器动态地包含/排除代码,因此我真的在寻找可以提供此信息的预处理器指令之类的东西。 问题答案: 已经问过,但标题却大不相同。 为iPhone编译时Xcode设置了什么#define
问题内容: 我需要一个独立于平台的(Linux / Unix | OSX)shell / bash命令,该命令将确定特定进程是否正在运行。例如,…最简单的方法/命令是什么? 问题答案: 尽管和是确定正在运行的工具的绝佳工具,但不幸的是,它们在某些操作系统上均不可用。确定的故障保护将使用以下内容: Gentoo Linux上的输出: OS X上的输出: 在Linux和OS X上,grep都会返回退出
给定一个卷,如何确定它是否加密?我发现了像DADiskCopyDescription()和NSURL的getResourceValue:forKey:error这样的东西:它们提供了丰富的信息,但并没有提供卷是否加密。 即使没有公共API,从操作系统附带的命令行工具中抓取输出也是可以接受的。我发现最接近的是“diskutil info /dev/disk0”,但同样没有加密信息。令人讨厌的是,当您
问题内容: 我的应用程序会定期在屏幕上显示信息。但是,如果屏幕截图处于活动状态,则应用程序应等待用户返回。 有什么方法可以确定屏幕保护程序是否正在运行? 我不需要干净的解决方案,您只需要在Windows XP上工作即可。 问题答案: 尝试使用JNA库来调用SystemParametersInfo系统调用。 下面的示例使用JNA提供的win32示例中的代码:
考虑到JAXB注释的对象,是否有办法确定类/字段/方法在封送过程中是否会导致xsi: type? 是XmlElement注释, 我唯一需要担心的情况? 我正在编写一个Lua解组器,在这里我们删除了很多常见的xml类型信息,我正在尝试找出如何将传入的Lua与JAXB匹配。 谢谢 --更新-- 下面是一个简单的示例,说明了问题: 当我收到一个动物对象时,我可以查询动物的注释来检测它应该是狗或猫而不是动