当另一个子进程完成时,如何终止子进程?

特雷特

我有一个代码段看起来像这样:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
  pid_t first, last;

  last = fork();
  if (last == 0) {
    char *args[] = { "./last", NULL };
    char *env[] = { NULL };
    execve("./last", args, env);
    _exit(1);
  } else if (last == -1) {
    fprintf(stderr, "Error: failed to fork last.\n");
    exit(1);
  }

  first = fork();
  if (first == -1) {
    fprintf(stderr, "Error: failed to fork first.\n");
    exit(1);
  } else if (first > 0) {
    int status;
    waitpid(first, &status, 0);
  } else {
    char *args[] = { "./first", NULL };
    char *env[] = { NULL };
    execve("./first", args, env);
    _exit(1);
  }

  return 0;
}

从某种意义上说,这可以正常工作,我可以看到进程正在被调用并正在运行。但是,我的问题是该进程last具有无限循环,并且当进程first终止时,它仍然保持运行状态。C中是否有一种方法可以迫使进程last在此过程first完成时也终止

莫希斯·雷迪(Mohith Reddy)

kill()应该很有趣。从手册页kill()

#include <sys/types.h>
#include <signal.h>

int kill(pid_t pid, int sig);

由于fork()在父级中返回子级PID,因此您可以使用来调用kill()这是修改后的代码和测试运行。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <signal.h>  // Modification 1

int main(int argc, char *argv[]) {
  pid_t first, last;

  last = fork();
  if (last == 0) {
    char *args[] = { "./last", NULL };
    char *env[] = { NULL };
    execve("./last", args, env);
    _exit(1);
  } else if (last == -1) {
    fprintf(stderr, "Error: failed to fork last.\n");
    exit(1);
  }

  first = fork();
  if (first == -1) {
    fprintf(stderr, "Error: failed to fork first.\n");
    exit(1);
  } else if (first > 0) {
    int status;
    waitpid(first, &status, 0);
    kill(last, SIGINT);   // Modification 2
  } else {
    char *args[] = { "./first", NULL };
    char *env[] = { NULL };
    execve("./first", args, env);
    _exit(1);
  }

  return 0;
}

终端会议(之前):

$ ls test first last 
first  last  test
$ ./test
$ ps aux | grep last
root      165130  0.0  0.0   2136   752 pts/3    S    16:58   0:00 ./last
root      165135  0.0  0.0   6136   892 pts/3    S+   16:58   0:00 grep last

终端会议(之后):

$ ls test first last 
first  last  test
$ ./test
$ ps aux | grep last
root      165240  0.0  0.0   6136   836 pts/3    S+   17:01   0:00 grep last

关于要传递的信号:默认动作是终止的任何人。您可以从signal手册页中找到更多信息由于我不知道last可执行文件中到底有什么内容,因此我假设没有注册信号处理程序SIGINT,因此在lastgets时SIGINT,程序默认终止。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用python multiprocessing子进程如何终止另一个子进程?

来自分类Dev

使用子进程的stdout作为另一个进程的stdin时,有时数据不会传递给第二个子进程

来自分类Dev

Python杀死一个子进程(启动另一个进程)并再次启动

来自分类Dev

当父进程被“ kill -9”杀死时,如何终止子进程

来自分类Dev

我如何等待除一个子进程之外的所有子进程完成

来自分类Dev

在承诺结束时终止子进程

来自分类Dev

在一段时间后终止子进程

来自分类Dev

asyncio在超时时终止子进程

来自分类Dev

如何区分一个子进程与其他子进程

来自分类Dev

采用另一个进程的子窗口

来自分类Dev

单击另一个子菜单时如何关闭一个子菜单

来自分类Dev

在子进程运行和通信时终止子进程,这些子进程通过队列进行清晰的通信

来自分类Dev

终止子进程的父进程的输出是什么?

来自分类Dev

将python子进程用作另一个用户时的错误环境

来自分类Dev

父进程有多个子进程,而两个子进程有一个子进程

来自分类Dev

当另一个正在运行时,如何打开子进程?

来自分类Dev

Python; 如何正确调用另一个python脚本作为子进程

来自分类Dev

如何限制一个进程及其子进程的CPU使用率,而不管是否存在另一个要求资源的进程

来自分类Dev

如何限制一个进程及其子进程的CPU使用率,而不管是否存在另一个要求资源的进程

来自分类Dev

Python:等待第一个子进程完成

来自分类Dev

子进程:在后台启动进程并在一次调用中启动另一个进程

来自分类Dev

在Electron中产生一个子进程

来自分类Dev

如何在C中达到一定时间限制后准确地终止子进程?

来自分类Dev

从另一个子执行子

来自分类Dev

Windows cmd .bat-启动一个子进程,该进程同时运行到父进程,并在父进程关闭时关闭

来自分类Dev

Windows cmd .bat-启动一个子进程,该进程同时运行到父进程,并在父进程关闭时关闭

来自分类Dev

当另一个子视图改变位置时如何调整子视图的大小

来自分类Dev

当第一个在python3中完成时,如何终止并行进程?

来自分类Dev

等待一个进程完成并执行另一个进程

Related 相关文章

  1. 1

    使用python multiprocessing子进程如何终止另一个子进程?

  2. 2

    使用子进程的stdout作为另一个进程的stdin时,有时数据不会传递给第二个子进程

  3. 3

    Python杀死一个子进程(启动另一个进程)并再次启动

  4. 4

    当父进程被“ kill -9”杀死时,如何终止子进程

  5. 5

    我如何等待除一个子进程之外的所有子进程完成

  6. 6

    在承诺结束时终止子进程

  7. 7

    在一段时间后终止子进程

  8. 8

    asyncio在超时时终止子进程

  9. 9

    如何区分一个子进程与其他子进程

  10. 10

    采用另一个进程的子窗口

  11. 11

    单击另一个子菜单时如何关闭一个子菜单

  12. 12

    在子进程运行和通信时终止子进程,这些子进程通过队列进行清晰的通信

  13. 13

    终止子进程的父进程的输出是什么?

  14. 14

    将python子进程用作另一个用户时的错误环境

  15. 15

    父进程有多个子进程,而两个子进程有一个子进程

  16. 16

    当另一个正在运行时,如何打开子进程?

  17. 17

    Python; 如何正确调用另一个python脚本作为子进程

  18. 18

    如何限制一个进程及其子进程的CPU使用率,而不管是否存在另一个要求资源的进程

  19. 19

    如何限制一个进程及其子进程的CPU使用率,而不管是否存在另一个要求资源的进程

  20. 20

    Python:等待第一个子进程完成

  21. 21

    子进程:在后台启动进程并在一次调用中启动另一个进程

  22. 22

    在Electron中产生一个子进程

  23. 23

    如何在C中达到一定时间限制后准确地终止子进程?

  24. 24

    从另一个子执行子

  25. 25

    Windows cmd .bat-启动一个子进程,该进程同时运行到父进程,并在父进程关闭时关闭

  26. 26

    Windows cmd .bat-启动一个子进程,该进程同时运行到父进程,并在父进程关闭时关闭

  27. 27

    当另一个子视图改变位置时如何调整子视图的大小

  28. 28

    当第一个在python3中完成时,如何终止并行进程?

  29. 29

    等待一个进程完成并执行另一个进程

热门标签

归档