当前位置:  技术问答>linux和unix

关于kill()系统调用的一个问题

    来源: 互联网  发布时间:2017-01-05

    本文导语:  #include  #include  #include  #include  #include  #include  void send_signal(int pid,int signal) {   if(kill(pid,signal) == 0)   printf("send signal success.n");   else   printf("send signal failed.n"); } void received_signal(int signal) {   if(signal ==...

#include 
#include 
#include 
#include 
#include 
#include 

void send_signal(int pid,int signal)
{
  if(kill(pid,signal) == 0)
  printf("send signal success.n");
  else
  printf("send signal failed.n");
}


void received_signal(int signal)
{
  if(signal == SIGUSR1)
  printf("22222222222222222n");
}

void handler(int signal)
{
    if (signal == SIGUSR1) {
        printf("11111111111111111111111n");
    }
}

int main()
{
  pid_t pid;
  int status = 0; 
  int rc;

  if((pid = fork()) == 0) {
      signal(SIGUSR1,received_signal);
      printf("i am child process pid = %d.n",getpid());
    while (1);
  }

  if ((pid = fork()) == 0) {
      signal(SIGUSR1,handler);
    printf("the second process pid = %dn",getpid());
    while (1);
  }

  sleep(1);
  printf("pid = %dn",(pid_t)pid);
  rc = kill(0,SIGUSR1);
  printf("rc = %dn",rc);
  printf("333333333333333333333333333333n");
  printf("i am parent process.pid = %dn",getpid());
  wait(&status);
  exit(0);
}

这是我写的一个小的测试程序,想通过kill向进程组发送信号。
问题是:把kill的确把信号发送到所在的进程组了,可在执行
kill函数时好像就阻塞了,下面的很多代码就不执行了,求解!

|
If pid is 0, sig shall be sent to all processes (excluding an unspecified set of system processes) whose process group ID is equal
       to the process group ID of the sender, and for which the process has permission to send a signal.


if the value of pid causes sig to be generated for the sending process, and if sig is not blocked for the calling thread and if no
       other  thread has sig unblocked or is waiting in a sigwait() function for sig, either sig or at least one pending unblocked signal
       shall be delivered to the sending thread before kill() returns.


意思就是你给父进程同组发送信号,同样也会发给父进程自己,在kill返回之前这个信号被处理,而父进程没有注册SIGUSR1,你可以查一下SIGUSR1默认的处理是什么。 

两个子进程和父进程都是同组的,接受到信号后按道理是会打印的啊。

把while(1)换成while(1){pause();}看看。

|
fork()这个函数会返回2次,若返回大于0的任何数时它代表的是子进程的进程号;
若返回0,则表示父进程的进程号(也就是当前进程),而你

rc = kill(0, SIGUSR1);

这个kill函数却要杀死进程号为0进程,这不扯了,把自己(父进程)给杀掉了,
所以当然后面没有输出了。

    
 
 

您可能感兴趣的文章:

  • 关于kill调用
  • php调用kill命令平滑重启nginx
  • C++代码调用一个可执行程序后,想在5分钟后kill掉它,应当如何做?
  • linux 模块调用内核函数sys_kill
  • Kill -3 重定向问题
  • 关于kill的问题
  • ssh到其他主机再kill进程脚本问题
  • kill的问题
  • kill的一个问题
  • shell管道使用kill问题
  • 关于使用信号量的一个进程被kill的问题
  • 紧急问题:我启动一个java程序之后用ps一看,为和显示我启动了多个程序?然后我kill-9第一个pid之后,又全部没了
  • 请教一个简单的shell:关于kill的问题
  • 请教关于Kill向子进程发送信号的问题,子进程如何相应信号,为什么子进程接受不到。
  • 内存耗尽,进程被kill问题
  • Kernel panic - not syncing: Attempted to kill init! 问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问Killed系统错误是什么原因造成的?如何避免?
  • UNIX系统下,进程写文件,写了很大量的文件,但是进程被KILL -9杀掉,系统可以保证写缓冲上的文件写到系统吗?
  • 网络发送数据时 进程所占内存缓慢增加,直到系统内存耗尽而killed掉,[请大家帮忙]
  • kill(1) 和 kill(2)是啥意思
  • socket发送端、接收端同一机器,kill掉接收端进程,发送端也被kill?
  • 为什么我的进程kill不掉?
  • kill命令注意?
  • 如何kill一个监听指定端口的程序
  • 求一小脚本,查找进程号然后kill掉
  • kill函数何时返回
  • 紧急求助,关于kill进程 , 大家帮帮忙啊 !!!
  • 应用层获得SIGIO信号如何区分是kill_fasync(poll_in)或kill_fasync(poll_out)产生的
  • 为什么用KILL杀不死进程啊!
  • kill命令的疑惑
  • 怎样用一条kill命令杀掉一批进程?
  • UNIX下用 sleep 时,进程不回响应,kill 都不行,都没有别的办法?
  • 如何将telnet我机器上的用户kill掉
  • Kill 脚本编写!
  • linux环境下如何kill某java应用程序??
  • 該進程為何kill 不掉啊
  • 为什么进程kill不掉?
  • kill产生的信号量是什么
  • linux 杀死名字相同的kill语句


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3