免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3487 | 回复: 17
打印 上一主题 下一主题

关于进程号获取的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-17 13:34 |只看该作者 |倒序浏览
有两个进程A和B,如果A向B发信号(kill方式),B能不能知道发送者A的进程号?

急!!!
               谢谢!

论坛徽章:
0
2 [报告]
发表于 2005-04-17 18:59 |只看该作者

关于进程号获取的问题

关注。。
我记得以前的白云黄鹤BBS里有个牛牛解答过你这个问题
可是年代久远已经找不到那个牛牛的文章了
谁能解答这个问题阿
在下关注的很

论坛徽章:
0
3 [报告]
发表于 2005-04-17 22:35 |只看该作者

关于进程号获取的问题

不能

论坛徽章:
0
4 [报告]
发表于 2005-04-17 22:39 |只看该作者

关于进程号获取的问题

能不能用截取系统调用的方法取得?

论坛徽章:
0
5 [报告]
发表于 2005-04-19 16:06 |只看该作者

关于进程号获取的问题

很想知道!     

论坛徽章:
0
6 [报告]
发表于 2005-04-19 16:37 |只看该作者

关于进程号获取的问题

可以!
man sigaction

论坛徽章:
0
7 [报告]
发表于 2005-04-19 17:24 |只看该作者

关于进程号获取的问题

我想打印出pid
可是会Segmentation fault
有兴趣的帮忙看看


  1. void fun2(int sig, siginfo_t *info, void *p)
  2. {
  3.         printf("[%p][%d]\n", info, info->;si_pid);
  4. }

  5. int main()
  6. {
  7.         struct sigaction newact;

  8.         bzero(&newact, sizeof(newact));
  9.         newact.sa_sigaction = fun2;
  10.         sigemptyset(&newact.sa_mask);
  11.         newact.sa_flags = 0;
  12.         sigaction(SIGINT, &newact, NULL);
  13.         sleep(100);
  14. }
复制代码


编译、运行、Ctrl+c

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2005-04-19 17:30 |只看该作者

关于进程号获取的问题

  1. # include  <stdio.h>;
  2. # include  <signal.h>;

  3. void sig_alarm(int signo, siginfo_t *p_sig, void *p_arg)
  4. {
  5.     fprintf(stderr, "own pid %d, signal from %d\n", getpid(), p_sig->;si_pid);
  6. }

  7. void sig_proc()
  8. {
  9.     struct sigaction sNewAct, sOldAct;
  10.     sNewAct.sa_sigaction = sig_alarm;
  11.     sigemptyset(&sNewAct.sa_mask);
  12.     sNewAct.sa_flags = SA_SIGINFO;
  13.     sigaction(SIGALRM, &sNewAct, &sOldAct);
  14. }

  15. int sig_sleep(int nSec)
  16. {
  17.     sigset_t sigNewMask, sigOldMask, sigSuspMask;
  18.     unsigned int nUnSleep;

  19.     sigemptyset(&sigNewMask);
  20.     sigaddset(&sigNewMask, SIGALRM);
  21.     sigprocmask(SIG_BLOCK, &sigNewMask, &sigOldMask);
  22.     if(nSec >; 0) alarm(nSec);
  23.     sigSuspMask = sigOldMask;
  24.     sigdelset(&sigSuspMask, SIGALRM);
  25.     sigsuspend(&sigSuspMask);

  26.     nUnSleep = alarm(0);
  27.     sigprocmask(SIG_SETMASK, &sigOldMask, NULL);

  28.     return(nUnSleep);
  29. }

  30. void endproc()
  31. {
  32.     exit(0);
  33. }

  34. main()
  35. {
  36.     long pid;
  37.     signal(SIGUSR1, endproc);
  38.     sig_proc();
  39.     if((pid = fork()) == 0) {
  40.         while(1) {
  41.             sig_sleep(0);
  42.         }
  43.     }
  44.     else {
  45.         while(1) {
  46.             sleep(5);
  47.             kill(pid, SIGALRM);
  48.         }
  49.     }
  50. }
复制代码

在linux下可以

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
9 [报告]
发表于 2005-04-19 17:34 |只看该作者

关于进程号获取的问题

SCO UNIXWARE下也可以,别的系统没有

论坛徽章:
0
10 [报告]
发表于 2005-04-19 18:39 |只看该作者

关于进程号获取的问题

给点注释吧
sig_sleep里的是啥意思呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP