unix下的c程序下怎么监听某进程

angel518 2009-05-05 08:47:38
偶要在unix下开发个c程序AA,该程序先启动,并使其在后台运行,然后在同一终端窗口下启动新的程序BB,其中有个功能:要求AA程序能监听BB程序,如果BB程序退出,AA程序自动结束,问题是C程序中怎么实现获取某终端(即当前TTY下)运行某程序的进程号啊
能给点代码吗
...全文
86 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tian428 2009-05-06
  • 打赏
  • 举报
回复
这里有一个父进程捕获 SIGCHLD 信号的例子
http://www.linuxforum.net/books/upfaq/c665.htm
angel518 2009-05-06
  • 打赏
  • 举报
回复
偶还没有UNIX下开发的经验,没用过这些FORK等,那位能给点比较详细的代码,谢谢了啊
yingkundu 2009-05-06
  • 打赏
  • 举报
回复
这就是你想要的:


#include<unistd.h>
2 #include<sys/types.h>
3 #include<sys/wait.h>
4 #include<stdio.h>
5 #include<stdlib.h>
6
7 int main(void)
8 {
9 pid_t child;
10 int status;
11 if((child=fork())==-1)
12 {
13 perror("fork");
14 exit(EXIT_FAILURE);
15 }
16 else if(child==0)
17 {
18 puts("in child");
19 printf("\tchild pid =%d\n",getpid());
20 printf("\tchild ppid =%d\n",getppid());
21 exit(EXIT_SUCCESS);
22 }
23 else
24 {
25 waitpid(child,&status,0);//等待pid为child的子进程;status会保存子进程结束状态值;
26 puts("in parent");
27 printf("\tparent pid =%d\n",getpid());
28 printf("\tparent ppid =%d\n",getppid());
29 printf("\tchild exited with %d\n",status);
30 }
31 exit(EXIT_SUCCESS);
32
33 }
34
35 /*
36 waitpid()会暂停目前进程的执行,直到有信号来到或子进程结束。如果在调用waitpid()时子进程已经结束,则waitpid()会立即返回子进程结束状态值。子进程的结束状态值
由status返回,而子进程的进程识别码也会一块返回。
37
38
39 */
40
41
42
43 /*
44 运行结果:

45 in child
46 child pid =8426
47 child ppid =8425
48 in parent
49 parent pid =8425
50 parent ppid =8193
37,0-1 Top

  • 打赏
  • 举报
回复
[Quote=引用楼主 angel518 的帖子:]
偶要在unix下开发个c程序AA,该程序先启动,并使其在后台运行,然后在同一终端窗口下启动新的程序BB,其中有个功能:要求AA程序能监听BB程序,如果BB程序退出,AA程序自动结束,问题是C程序中怎么实现获取某终端(即当前TTY下)运行某程序的进程号啊
能给点代码吗
[/Quote]

很多办法,如果你fork,那自然wait就可以了。

或者你可以向办法获取BB进程的pid,然后再通过各种进程通信的的方式,在退出的时候通知AA也可以。
liliangbao 2009-05-05
  • 打赏
  • 举报
回复
up
mymtom 2009-05-05
  • 打赏
  • 举报
回复
fork exec waitpid

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧