Tag: 进程

procs,fork()和mutexes

我想创建并行运行的n个进程,让它们锁定互斥锁,递增计数器,然后解锁并退出。 这是我的代码: #include #include #include #include #include #include #include pthread_mutex_t mutex; int main(int argc, char **argv) { if (argc != 2) return 0; int n = atoi(argv[1]); int i = 0; int status = 0; pthread_mutex_init(&mutex, NULL); pid_t pid = 1; static int *x; x = mmap(NULL, sizeof *x, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, […]

Fork永远不会进入孩子的过程

我正在编写一个模仿shell行为的代码,特别是&和|。 我的函数接收用户命令,并检查是否有&在最后,然后子进程应该在后台运行,父进程不应该等待它完成并继续执行命令。 它也应该检查是否有| 在输入数组中运行两个子进程,同时管道他们的stdin和stdout。 我已经实现了&的行为,但每当我编译并运行我的代码时,我只从父进程中获取printf语句。 我想听听如何解决这个问题的想法,此外,我将不胜感激任何关于|的实施的建议 (管道)以及如何防止僵尸。 int process_arglist(int count, char** arglist) { int pid = fork(); printf(“%d”, pid); switch (pid) { case -1: fprintf(stderr, “ERROR: fork failed\n”); return 1; break; case 0: // Son’s proccess printf(“I got to son”); //check last arglist argument if (strcmp(arglist[count – 1], “&”) == 0) { setpgid(0, 0); arglist[count […]

Linux c / c ++如何从ThreadID中查找PID

我目前正在编写一个应该实现基于进程的访问权限的FUSE应用程序。 我现在偶然发现,FUSE只提供ThreadID,而不是ProcessID。 现在我需要找到不同进程的给定线程ID的PID(或线程组ID)。 我注意到proc fs提供了基于线程的信息(即使ls / proc没有显示任何PID TID,它们仍然可以通过/ proc / /访问)这样我可以问/ proc / / status关于Tgid,但由于我的FUSE应用程序每秒会提供数百个请求,我觉得这可能不是最好的方法。 有没有人知道这里使用的formsgettgid(tid)的系统调用或函数?

在后台C linux中运行一个新的子进程

我正在尝试在后台运行一个新进程,以便继续使用父进程。 我用fork然后execl。 我试图在execl命令中添加参数&但它不起作用: execl(“newproc”,”newproc”,”arg1″,”&”,NULL); 有什么解决方案吗?

在MinGW g ++编译器中获取“tlhelp32.h”的编译错误

我正在编写一个简单的C ++应用程序来检查给定的exe文件示例:’a.exe’是否正在运行(Windows OS),我已经用Google搜索并在下面的链接中找到了一些代码。 http://stackoverflow.com/questions/3355379/how-do-i-find-out-if-a-exe-is-running-in-c 上面提到的代码使用头文件“tlhelp32.h”。 我只是复制了代码并进行了一些必要的更改,然后在MinGW中编译,出现了下一个问题,该头文件中提到的所有数据类型都出错了ex: ‘DWORD’ does not name a type, ‘LONG’ does not name a type, ‘WCHAR’ does not name a type,’CHAR’ does not name a type 在现有的头文件无法编译之前,我从未遇到过这种问题(是的,我已经检查了它)。 非常感谢任何帮助。 代码如下: #include int main() { PROCESSENTRY32 pe32 = {0}; HANDLE hSnap; int iDone; int iTime = 60; bool bProcessFound; while(true) // go forever { […]

从另一个程序控制C守护程序

我正在尝试从另一个用户空间程序控制C守护程序。 – 简单的C守护进程 这个守护进程只是一个C程序,它通过syslog每秒守护自己并记录一条消息。 #include #include #include #include #include void bye(); int main() { printf(“Daemon starting …\n”); openlog(“daemon-test”, LOG_PID, LOG_DAEMON); signal(SIGTERM, bye); if(0 != daemon(0, 0)) { syslog(LOG_ERR, “Can’t daemonize\n”); return EXIT_FAILURE; } syslog(LOG_INFO, “Daemon started !\n”); while(1) { syslog(LOG_INFO, “Daemon alive\n”); sleep(1); } return EXIT_SUCCESS; } void bye() { syslog(LOG_INFO, “Daemon killed !\n”); exit(EXIT_SUCCESS); […]

为什么不能触发子进程中的信号处理程序?

我的目的是为fgets创造1秒的时间。 如果在1秒内未收到任何输入,则程序终止。 我想出的设计是:父级为SIGALRM注册一个信号处理程序。 然后它会分叉一个触发SIGALRM的孩子,然后继续调用fgets。 SIGALRM将触发杀死父进程的处理程序。 但是当我在64位的ubuntu 14.04上执行此操作时,处理程序不会被触发,程序只是等待用户永远输入fgets。 为什么会发生这种情况,我该如何解决这个问题? #include “csapp.h” void handler() { printf(“lazy man\n”); kill(SIGKILL, getppid()); exit(0); } int main() { char buf[100]; signal(SIGALRM, handler); pid_t pid; if ((pid = fork()) == 0) { alarm(1); } else { fgets(buf, 100, stdin); printf(“%s”, buf); } return 0; } 〜

命令行参数和C中的读取文件/打印文本

我正在尝试使用命令行参数和解析C中的文本文件。基本上我希望能够输入两个数字,如1和4,并让它读取文本文件的列然后将其打印到stdout。 我希望能够做到这样的事情: PID TTY TIME CMD 449 ttys000 0:00.35 -bash 1129 ttys001 0:00.35 -bash 25605 ttys001 0:00.15 vi prog.c 6132 ttys002 0:00.11 -bash 6208 ttys002 0:00.03 vi test 并做: ./your_prog 1 4 < data.txt PID CMD 449 bash 1129 -bash 25605 vi 6132 -bash 6208 vi 所以我需要输入我要打印的列,将文件重定向到“data.txt”并让它处理文件并打印出来。 到目前为止,我的代码是: #include int main(int argc, char **argv){ //int […]

在连续运行的C和Python应用程序之间传递数据

有没有办法在连续运行的C程序和连续运行的Python程序之间传递数据? C程序首先启动至关重要。 到目前为止,我有(对于C方): void run_cmd(char *cmd[]) { int parentID = getpid(); char str[1*sizeof(double)]; sprintf(str, “%d”, parentID); char* name_with_extension; name_with_extension = malloc(2+strlen(cmd[1])+1*sizeof(int)+1); strcat(name_with_extension, cmd[1]); strcat(name_with_extension, ” “); strcat(name_with_extension, str); pid_t pid; char *argv[] = {“sh”, “-c”, name_with_extension, NULL}; int status; //printf(“Run command: %s\n”, cmd); status = posix_spawn(&pid, “/bin/sh”, NULL, NULL, argv, environ); if (status == 0) […]

如何在C中按顺序执行子进程

我用C编写了一个代码来计算文件中的单词和字符。 像wc命令一样。 代码如下,工作正常。 #include #include #include #include #include #include char* concat(char *s1, char *s2) { char *result = malloc(strlen(s1)+strlen(s2)+1); strcpy(result, s1); strcat(result, s2); return result; } int countLines(char *f){ FILE *file = fopen(f, “r”); int count = 0; char ch; while ((ch = fgetc(file)) != EOF){ if (ch == ‘\n’) count++; } return count; } […]