Tag: 亲子

当父母被发信号杀死孩子时,如何将其他参数挤入收割者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? 提前谢谢,我希望马上问三个问题不是太贪心。 任何有关任何问题的见解将不胜感激。

使用wait()从子进程中检索返回码?

我有2个文件“prime.c”和“singlePrime.c”,并且在singlePrime.c中。我正在尝试创建一个将自身变形为“isPrime.exe”的子项,这是一个由“prime.c”构成的可执行文件。 我想要做的是从isPrime.exe获取返回数字,因此取决于输入的数字是否为素数,然后将它存储在1或0中,然后将其存储在“singlePrime.c”的main()函数内的childNum中,以便我可以根据“isPrime.exe”返回的1或0打印到终端是否为素数。 以下是我的2个文件: prime.c: /* File is isPrime.c Purpose: a program that checks if a given number is a prime number input: number – a positive int entered via the command line parameters. For example isPrime 1234 output: 0 – if the input number is not a prime number 1 – if the input number […]

在父进程退出时终止子进程

我对c和编程很新,需要一些帮助。 在Linux上的c(cygwin)我需要在退出时删除所有子进程。 我看过其他类似的问题,但无法让它发挥作用。 我试过了- atexit(killzombies); //in parent process void killzombies(void) { printf(“works”); kill(0, SIGTERM); printf(“works”); if (waitpid(-1, SIGCHLD, WNOHANG) < 0) printf("works"); } 由于某种原因,“作品”甚至不打印。 我按ctrl + c退出。 我也尝试过 – prctl(PR_SET_PDEATHSIG, SIGHUP); //in child process signal(SIGHUP, killMe); void killMe() { printf(“works”); exit(1); } 但是因为我正在使用cygwin,当我#include ,cygwin说它找不到文件或目录,我不知道要为它安装什么包。 此外,如果我的prctl()函数工作,会杀死所有的僵尸吗? 我的程序是客户端服务器,我的服务器forks()来处理每个客户端。 我想在服务器关闭时不留下任何剩余的僵尸。

为什么进程子进程会执行一些意外的行?

所以我开始知道进程如何工作并编写了一些简单的代码。 #include #include #include #include int SemId; void SemGet(int n) { SemId = semget(IPC_PRIVATE, n, 0600); if (SemId == -1) { exit(1); } } int SemSetVal(int SemNum, int SemVal) { return semctl(SemId, SemNum, SETVAL, SemVal); } int SemOp(int SemNum, int SemOp) { struct sembuf SemBuf; SemBuf.sem_num = SemNum; SemBuf.sem_op = SemOp; SemBuf.sem_flg = 0; return […]