与进程调度有关的系统调用
fork():建立进程
void main()
{
int sum=0,i,n;//父进程的常量声明在最开始
if(fork()==0){ //fork==0 子进程
int mul=1,i;
for(i=1;i<=100;i++){
mul=mul*i; //for循环实现1-100的阶乘
}
printf("这里是子进程实现1-100阶乘为:%d.\n",mul); //打印输出
Exit(0); //系统调用显性强制退出
}else{ //父进程
wait(&n);
for(i=1;i<=20;i++){
sum+=i;//for循环实现求和
}
printf("这里是父进程实现1-20求和为:%d\n",sum);
}
}
wait():父进程等待子进程
wait(&n);
父子子
#include <stdio.h>
#include <unistd.h>
int main()
{
if(fork()==0){//子进程01
pid_t pid;
pid = getpid();
printf("子进程01的pid是%d.\n",pid);
exit(0);
}
if(fork()==0){//子进程02
int i,sum;
for(i=1;i<=10;i++)
{
sum+=i;
}
printf("子进程02的sum为%d.\n",sum);
exit(0);
}
printf("这里是父进程\n");
return 0;
}
if(fork()==0){
子进程B
exit(0);
}
if(fork()==0){
子进程C
exit(0);
}
{
父进程等待子进程--wait(&n);
父进程A
exit(0);
}
父子孙
#include <stdio.h>
#include <unistd.h>
int main()
{
int sum=0,i,n;
if(fork()==0){
if(fork()==0){
int mul=1,i;
for(i=1;i<=10;i++)
{
mul=mul*i;
}
printf("这里是孙进程求1-10的阶乘为%d.\n",mul);
exit(0);
}else
{
pid_t pid;
pid = getpid();
printf("这里是子进程求标识符为%d.\n",pid);
exit(0);
}
}else
{
for(i=1;i<=100;i++)
{
sum+=i;
}
printf("这里是父进程求1-100的和为%d.\n",sum);
exit(0);
}
return 0;
}
execve实现调用其他可执行文件
//子---创建子文件,进行编译,产生可执行文件son
#include<unistd.h>
#include<stdio.h>
void main(){
int mul=1,i;
for(i=1;i<=10;i++)
{
mul=mul*i;
}
printf("这里是子进程求1-10的阶乘为%d.\n",mul);
}
//孙---创建sun文件,进程编译,产生可执行文件grangson(sun)
#include<unistd.h>
#include<stdio.h>
void main(){
pid_t pid;
pid = getpid();
printf("这里是孙进程求标识符为%d.\n",pid);
}
//父-----进行调用使用execve函数调用子孙文件
#include<unistd.h>
#include<stdio.h>
int main() {
if (fork() == 0) {
if (fork() == 0) {
execve(".sun",0,0);
exit(0);
}
else
{
execve("./son",0,0);
}
exit(0);
}
else
{
int sum = 0;
for(int i = 1;i <= 100; ++i){
sum += i;
}
printf("这里是父进程,输出1-100的和:");
printf("%d\n",sum);
exit(0);
}
}
getpid(); 求标识符
pid_t pid;
pid = getpid();
printf(pid);
Exit(0);
课后作业
编写一个程序实现一个父进程创建一个子进程,子进程创建孙进程,要求父进程完成1~100的求和,子进程输出自己的进程标识符,孙进程输出1到10的乘积;要求父进程等待子进程,子进程不等待孙进程,所有进程结束时都用系统调用显式终止进程。
main()
{
int sum=0,i,n;
if(fork()==0){
if(fork()==0){
//孙进程实现1-10的乘积
int mul=1,i;
for(i=1;i<=10;i++)
{
mul=mul*i;
}
printf(mul);
Exit(0);
}else
{
pid_t pid;
pid = getpid();
printf(pid);
Exit(0);
}
}else
{
wait(&n);
for(i=1;i<=100;i++)
{
sum+=i;
}
printf(sum);
Exit(0);
}
}