西南交大操作系统实验:Linux进程创建及多进程并发

实验目的

了解Linux系统调用fork的工作原理。在Linux上编写C语言程序,实现在父进程中调用fork创建一个子进程。并在父子进程中分别调用getpid、getppid 返回父子进程的进程号,并检查返回的父子进程号所代表的父子关系是否一致,从而更好地理解进程的并发。

纠错,在Linux下sleep函数不是以毫秒为单位的,是以秒为单位,所以代码部分的sleep注释写错了,这里特别指出,但代码部分因为不能修改就继续保留。

 实验代码

#include <stdio.h>

#include <sys/types.h>

#include <unistd.h>

int main()

{

    pid_t pid;

    printf("the father pid = %d\n",getpid());

pid = fork();//父进程中调用fork创建一个子进程

// fork()调用成功,返回两次:返回值为0,代表当前进程为子进程,返回值大于零也就是子进程的PID,代表当前进程为父进程。返回值为-1,则代表函数调用失败,即创建子进程失败。

    if(pid > 0){

        printf("this is in father,the father pid = %d,childpid=%d\n",getpid(),pid);

        sleep(1);//父进程睡眠1毫秒

        //在父进程调用后加上 sleep()函数,让父进程陷入睡眠,而不导致它被摧毁。



}

else if(pid == 0)

{

        printf("this is in chird ,the child pid = %d,parentpid= %d\n",getpid(),getppid());

    }

    return 0;

}

/*当使用fork()创建子进程后,主函数调用时,父函数先于子函数被调用,当父函数完成调用被摧毁后,才调用子函数。也就是说,当子函数被调用时,父函数已经被“杀死”了,这时的子进程便成了“孤儿进程”,某个进程(如init)会收养这个子进程。所以,子进程的父进程发生了改变。sleep函数可以让父进程睡眠,不至于被杀死,子进程的父进程就不会发生改变。*/

在codeblocks上调试运行:

 参考文章:参考文章1

                  参考文章2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guts350

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值