关于fork创建子进程的一些疑惑

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/budong282712018/article/details/79955564

Python中执行 os.fork() 会创建 一个子进程,进程号为0

import os
import time
ret = os.fork()
if ret == 0:
    while True:
        print("1")
        time.sleep(1)
else:
    while True:
        print("2")
        time.sleep(1)

运行结果是:
1
2
1
2
1
2
...

ret = os.fork()会创建出子进程,然后主进程与子进程各自往下执行,才出现上面的结果。

fork 子进程问题

08-20

[code=C/C++]rn#include "apue.h"rn#include rnrnint flog =1 ;rnrnvoid alam_fn(int signo)rnrn printf("the clock time out");rn flog=0;rnrnrnrnint get_time(void)rnrn time_t cur_time,cfg_time,ptr,tmp_time,now_time;rn struct tm *tmptr;rn int hour , min;rn pid_t pid;rnrn system("date");rn printf("input clock time:hour,min ");rn scanf("%d,%d",&hour,&min);rnrn printf("%d,%d",hour,min);rn tmp_time = time(&ptr);rn tmptr = localtime(&ptr);rn if( (cur_time = mktime(tmptr))<0)rn err_quit("time error!");rn printf("the current time is :%d:%d",tmptr->tm_hour,tmptr->tm_min);rnrn now_time = tmptr->tm_hour*60+tmptr->tm_min ;rn cfg_time = ((hour*60+min)-now_time)*60 ;rnrn printf("cfg_time:%d",cfg_time);rn rn if(cfg_time < 0)rn return 1;rnrnreturn (cfg_time);rnrnrnrnintrnmain(int argc,char *argv[])rnrn pid_t pid;rn int clock_time;rn rn if((clock_time = get_time())<0)rn err_exit(1,"gettime error");rn if(signal(SIGALRM,alam_fn)==SIG_ERR)rn err_sys("signal error:");rn rn if((pid=fork())<0)rn err_sys("fork error");rn else if(pid == 0)rn rn alarm(clock_time);rn while(flog);rn exit(0);rn rnrn else rn printf("parent exit first\n");rn rn return 0;rnrnrnrnrn[/code]rnrn代码是我写的一个小练习,模拟闹钟的小程序,我的想法是 让父进程进行gettime操作 然后结束,然后子进程变成守护进程等待alarm超时,超时的时候 标准输出 “time out” 。现在的情况是功能可以实现 ,不过在超时的时候 子进程还把get_time函数里的那些打印信息打印了一遍,怎么可以不让打印这些信息呢?我试过用一个变量 当标志位可是也没有用。

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试