网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
11月25日漏签0天
linux吧 关注:530,080贴子:2,572,593
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 14回复贴,共1页
<<返回linux吧
>0< 加载中...

问个kill和signal的问题

  • 只看楼主
  • 收藏

  • 回复
  • 立世出身
  • ------wx
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include<stdlib.h>
int tostop=0;
void stop(int dunno)
{
tostop=1;
printf("ssssssss\n");
} int main()
{
int retval;
int rewait;
pid_t pid1; pid1=fork(); if(pid1==0)
{
signal(16,stop); exit(0);
} else if(pid1>0)
{
sleep(5);
retval=kill(pid1,16);
sleep(5);
tostop=1;
rewait=wait(0);
printf("pid1=%d\n",pid1);
printf("rewait=%d\n",rewait);
printf("retval=%d\n",retval);
}
return 0;
}


  • 立世出身
  • ------wx
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
kill向子进程发信号16后,子进程应该进到stop才对啊
可是stop没打印东西啊


2025-11-25 20:15:17
广告
不感兴趣
开通SVIP免广告
  • 立世出身
  • ------wx
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
求指教啊,急等!


  • 立世出身
  • ------wx
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
求大神啊,急等


  • 又见炊烟升起
  • ----x-w-
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
子进程结束的太早了。
在 signal(16,stop); 与exit(0);之间加个pause() 试试


  • 立世出身
  • ------wx
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include<stdlib.h> int tostop=0;
int tostop2=0;
int tostop1=0; pid_t pid1,pid2; void stop(int dunno)
{
tostop=1; printf("In stop\n");
} void stop1(int dunno)
{
tostop1=1;
printf("In stop1\n");
} void stop2(int dunno)
{
tostop2=1;
printf("In stop2\n");
} int main()
{
int retval;
int rewait;
int k1,k2;
//pid_t pid1,pid2; pid1=fork();
if(pid1<0)
{
printf("Error in pid1\n");
return 0;
}
else if(pid1==0)
{
signal(16,stop1);
while(tostop1==0);
printf("Child process1 is killed by parent!\n");
exit(0);
} else if(pid1>0)
{
pid2=fork();
if(pid2<0)
{
printf("Error in pid2\n");
return 0;
}
else if(pid2==0)
{
signal(17,stop2);
while(tostop2==0);
printf("Child process2 is killed by parent!\n");
exit(0);
}
else
{
signal(2,stop); while(tostop==0)
sleep(1);
kill(pid1,16);
kill(pid2,17);
printf("k1=%d,k2=%d\n",k1,k2);
while(tostop1==0 || tostop2==0)
{
printf("tostop1=%d\n",tostop1);
printf("tostop2=%d\n",tostop2);
sleep(1);
}
wait(0);
wait(0);
printf("Parent process is killed!\n");
exit(0);
}
}
return 0;
}


  • 立世出身
  • ------wx
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
kill返回是0,应该成功了,可是tostop1和tostop2改不了


  • 立世出身
  • ------wx
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我说的是刚发的那个


2025-11-25 20:09:17
广告
不感兴趣
开通SVIP免广告
  • 立世出身
  • ------wx
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
急等


  • 寂屋粉汗灯点点
  • -----rwx
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
fork 之后,子进程获得父进程数据空间,堆和栈的副本。所谓副本,就是和原来一样的一份拷贝。父子进程并不共享。tostop1和tostop2 只改了子进程里面的,不影响父进程里面的这两个变量。


  • 立世出身
  • ------wx
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
谢了,原来是ctrl+C的问题


  • liwei109250710
  • -------x
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
请问为什么要添加signal(2, SIG_IGN); 呢?不过我添加了以后确实好用了


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 14回复贴,共1页
<<返回linux吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示