Tag: pid

当父母被发信号杀死孩子时,如何将其他参数挤入收割者function?(c)?

我正在编写一个TCP服务器,它的function非常像聊天室,并且遇到了这个问题。 当用户连接时,将创建子进程以为用户提供服务。 当用户登录时,我将他的用户名存储到文本文件online.txt 但是当用户注销时,我需要从online.txt (问题)中删除用户,然后父母signals online.txt reaper()并杀死孩子。 我的问题是: 问题1:我如何向收割者挤出额外的信息(例如用户用来登录的用户名),这样它也可以从online.txt删除用户? 或者还有另一种更好的方法吗? Q2: reaper()中的sig从哪里获得价值? 我可以在收割机上添加其他参数吗? 问题3:我可以将孩子的pid用作login.txt的某种主键吗? 如果是这样,如何在父母调用的reaper()期间检索孩子的pid? 收割机看起来像这样: void reaper(int sig)//where does sig come from? { int status; while (waitpid(-1, &status, WNOHANG) >= 0) ; } 父母使用的信号如下所示: (void) signal(SIGCHLD, reaper);//how can I add more parameters? 提前谢谢,我希望马上问三个问题不是太贪心。 任何有关任何问题的见解将不胜感激。

使用fork在c ++程序中调用非阻塞系统

基于这个SO post和这个例子 ,我希望当我使用fork()时,允许我以非阻塞方式执行system / execvp。 但是,当我尝试在上面提到的示例代码中的fork块中发出长时间运行的子进程时,控件不会返回父块,直到子进程完成。 你能告诉一个方法,我应该如何设计代码以允许在C / C ++代码中对系统进行非阻塞调用。 另外,我打算编写一个程序,其中多个孩子从同一个父母分叉。 我怎样才能得到孩子们的pid? 谢谢你的帮助。

子进程和父进程ID

刚刚与子进程块中的父pid值混淆。 我的计划如下: int main(int argc, char *argv[]) { pid_t pid; pid=fork(); if(pid==-1){ perror(“fork failure”); exit(EXIT_FAILURE); } else if(pid==0){ printf(“pid in child=%d and parent=%d\n”,getpid(),getppid()); } else{ printf(“pid in parent=%d and childid=%d\n”,getpid(),pid); } exit(EXIT_SUCCESS); } 输出:父级中的pid = 2642,子级= 2643 子元素中的pid = 2643,父元素= 1 在“高级Unix编程”中,它表示子进程可以使用getppid()函数获取父进程id。 但在这里我得到“1”,这是“init”进程ID。 如何在子进程块中获取父pid值..请帮助我获取输出。 我在“Linux Mint OS”中执行但在“WindRiver”操作系统中我没有遇到这个问题。 该程序是否根据操作系统改变行为?

如何以编程方式获取OS X上给定PID的打开文件描述符列表?

我见过的所有东西都说使用lsof -p ,但我正在寻找一些不需要fork / exec的东西。 例如在Linux上,可以简单地走/proc/{pid}/fd 。

捕获子进程的退出状态代码

我有一个函数,它分叉一个进程,复制输入和输出缓冲区的文件描述符,然后通过一个名为cmd的字符串传入的命令运行execl : static pid_t c2b_popen4(const char* cmd, int pin[2], int pout[2], int perr[2], int flags) { pid_t ret = fork(); if (ret < 0) { fprintf(stderr, "fork() failed!\n"); return ret; } else if (ret == 0) { /* Assign file descriptors to child pipes (not shown)… */ execl("/bin/sh", "/bin/sh", "-c", cmd, NULL); fprintf(stderr, "execl() failed!\n"); […]

C – 用popen获取进程的PID

我有一个用C编写的程序,它使用popen打开另一个程序。 我想获得该程序的pid或某种处理程序,以便在一定的时间限制后杀死它,或者它超过某些ram和stdout限制。 我认为这必须用ptrace完成,它需要PID,我不知道如何获取。

如何在C中获得子PID?

我正在for -loop中创建子进程。 在子进程内部,我可以使用getpid()检索子PID。 但是,出于某种原因,当我尝试将getpid()的值存储到父进程声明的变量中时,当我在父进程中检查它时,更改无效。 我假设这与某种过程变量范围有关。 不太熟悉C,所以不能太确定。 无论如何,将子PID的getpid()结果getpid()从子进程调用时)存储到父进程的变量中的方法是什么? 或者另一种方法是将fork()存储到父变量中并在该变量上调用一些函数来检索子节点的PID? 我不知道怎么做,所以如果这是更好的方法,你会怎么做?

getpid和getppid返回两个不同的值

当我运行下面的代码时 #include #include //int i=0; int main(){ int id ; id = fork() ; printf(“id value : %d\n”,id); if ( id == 0 ) { printf ( “Child : Hello I am the child process\n”); printf ( “Child : Child’s PID: %d\n”, getpid()); printf ( “Child : Parent’s PID: %d\n”, getppid()); } else { printf […]

如何检测Linux上程序的启动?

我写了一个简单的守护进程。 当我运行任何程序时,该守护进程应该响应。 这该怎么做? 在一个大守护进程循环中: while(1) { /* function which catches new programm running */ } 当我运行一个新程序(创建新进程)时,在linux中调用什么函数?