教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 行业范文 >

Linux进程创建实验

来源:网络收集 时间:2026-09-17
导读: Linux进程创建实验过程 Linux进程创建 实验目的 1. 了解有关Linux系统调用; 2. 学习有关Linux的进程创建,理解进程创建后两个并发进程的执行。 实验内容 在Linux环境下,用c语言编程,使用系统调用fork创建进程一个子进程。观察其运行的结果。 实验提示:LI

Linux进程创建实验过程

Linux进程创建

实验目的

1. 了解有关Linux系统调用;

2. 学习有关Linux的进程创建,理解进程创建后两个并发进程的执行。 实验内容

在Linux环境下,用c语言编程,使用系统调用fork创建进程一个子进程。观察其运行的结果。

实验提示:LINUX系统调用

1. 进程控制的系统调用

l fork系统调用创建新的子进程

格式: pid=int fork()

fork调用返回时,系统中已有两个用户级环境完全相同的进程存在,这两个进程从fork调用中得到的返回值不同,其中子进程得到的返回值为零,父进程得到的返回值是新创建子进程的进程标识号。

l exec系统调用

格式:(六种)

int execl(path,arg0,arg1,…,argn,(char *)0)

char *path, *arg0, *arg1, …, *argn ;

exec调用进程的正文段被指定的目标文件的正文段所覆盖,其属性的变化方式与fork成功后从父进程那里继承属性的方式几乎是一样的。系统中绝大多数命令都是通过exec来执行的,不但shell进程所创建的子进程使用它来执行用户命令,shell进程本身和它的祖先进程也是用exec来启动执行的。 l exit系统调用终止进程执行

格式:void exit(status)

int status ;

参数status是调用进程终止时传递给其父进程的值。如调用进程还有子进程,则将其所有子进程的父进程改为1号进程。

l wait系统调用等待子进程暂仃或终止

格式:int wait(stat_loc) int wait((int *)0)

int stat_loc ;

wait调用将调用进程挂起,直到该进程收到一个被其捕获的信号或者它的任何一个子进程暂仃或终止为止。如果wait调用之前已有子进程暂仃或终止,则该调用立即返回。

l lockf 锁定文件

格式:int lockf(fd,fuction,size)

Linux进程创建实验过程

int files, fuction; long size; fd – 锁定文件标识

function=0不锁定表示

=1锁定

=2测试和锁定

=3测试有否被锁定

size --锁定或解锁的字节数,0表示从文件的当前位置到文件尾。 l C Program forking a separate process

#include <stdio.h>

void main(int argc, char *argv[ ])

{ int pid;

pid=fork(); /* fork child process */

if (pid<0){ fprintf(stderr, “Fork Failed”); exit(-1); }

else if (pid==0) { execlp(“/bin/ls”,”ls”,NULL); } /* child process */ else { wait(NULL);

printf(“child Complete”);

exit(0);

} /*parent process */

}

2.进程通信的系统调用

l pipe系统调用

格式: int pipe (filedes)

int filedes [2];

l 消息机制

Msgid=msgget(key,msgflg)

key_t key;

int msgflg;

Msgctl(msgid, cmd, buf)

int msgid, cmd;

msgqid_ds #buf;

msgsnd(msgid, msgp, msgsz, msgflg)

int msgid;

struct msgbuf *msgp;

int msgsz, msgflg;

msgrcv (msgid, msgp, msgsz, msgtyp, msgflg );

int msgid;

struct msgbuf *msgp;

int msgsz;

long msgtyp;

int msgflg;

管道通信程序#include <stdio.h>

Linux进程创建实验过程

#include <fcntl.h>

char parent[]={“A message from parent .”};

char child[]={“A message from child .”};

main()

{int chan1[2],chan2[2];

char buf[100];

if (pipe(chan1)==-1 || pipe(chan2)==-1) errexit(“pipe”); if (fork())

{close(chan1[0]); close(chan2[1]);

write(chan1[1],parent,sizeof parent);

close(chan1[1]);

read(chan2[0],buf,100);

printf(“parent process : %s \n”,buf);

close(chan2[0]);

}

else

{close(chan1[1]); close(chan2[0]);

read(chan1[0],buf,100);

printf(“child process : %s \n”,buf);

write(chan2[1],child,sizeof child);

close(chan2[1]); close(chan1[0]);

}

}

…… 此处隐藏:373字,全部文档内容请下载后查看。喜欢就下载吧 ……
Linux进程创建实验.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/2141114.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)