`

进程控制 Linux C fork() execl() exit() wait()

阅读更多
进程控制实验:

在linux下面使用c语言利用系统调用fork(), execl(), exit(), wait()
fork()用来复制进程
int fork() turns a single process into 2 identical processes, known as the parent and the child. On success, fork() returns 0 to the child process and returns the process ID of the child process to the parent process. On failure, fork() returns -1 to the parent process, sets errno to indicate the error, and no child process is created.
execl()调用外部命令
execl stands for execute and leave which means that a process will get executed and then terminated by execl.
exit()
int exit(int status) - terminates the process which calls this function and returns the exit status value. Both UNIX and C (forked) programs can read the status value.
wait()等待子进程执行结束
int wait (int *status_location) - will force a parent process to wait for a child process to stop or terminate. wait() return the pid of the child or -1 for an error. The exit status of the child is returned to status_location.

#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>

int main() {
        printf("main");
        pid_t pid;
        pid = fork();
        // son process create here, exact copy from parent process
        // son process will execute the main funciton after parent process
        if(pid<0) {
                printf("return");
                return 0;
        }
        if(pid==0) {
                printf("I am the child, my pid is %d\n", getpid());
        }else {
                printf("I am the parent, my pid is %d, my child pid is%d\n", getpid(), pid);
        }
//      sleep(6);
}


#define _GNU_SOURCE
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

void main() {
//	execl("/bin/echo", "echo", "I am in execl", (char*)0);
	pid_t pid;
	int status = -10;
	pid=fork();
	if(pid==0) {
		printf("i am in son proc\n");
		printf("pid = %d\n", getpid());
		int t = wait(&status);
		printf("t = %d\n", t);
		printf("status = %d\n", status);
	//子进程下面没有子进程,wait返回-1,status也未变化
		sleep(3);
	}else {	
	//wait(&status) 返回子进程的pid, status为执行exit(5)的一个值
	// 当然不为5, WEXITSTATUS(status)返回值为5
	//	sleep(3);
	// wait()会等待子进程执行结束,然后回过来的执行父进程
		printf("i am in father proc\n");
       		int t = wait(&status);
		printf("t = %d\n", t);
		printf("status = %d\n", status);
		printf("WEXITSTATUS(status)=%d\n",WEXITSTATUS(status));
	}
	exit(5);
}


0
3
分享到:
评论

相关推荐

    进程控制 fork函数的使用等

    总的来说,这些实验涉及了Linux进程控制的关键元素: 1. **fork**: 创建新进程,子进程与父进程几乎完全相同,但拥有独立的PID。 2. **vfork**: 创建子进程,共享父进程的地址空间,提高了创建效率,但限制了父进程...

    LINUX进程控制编程

    在Linux操作系统中,进程控制是系统管理的核心部分,它涉及到如何创建、管理、通信和终止进程。本主题“LINUX进程控制编程”旨在深入探讨这些概念,并教你如何在实际编程中应用它们。以下是对这个主题的详细阐述: ...

    Linux程序设计上机指导书3:Linux进程控制.pdf

    在上机指导书中,通过分析`systemtest.c`和`6-3.c`等代码示例,你可以学习如何使用`fork()`创建子进程,`execl()`执行新的程序,以及如何在子进程和父进程中分别处理逻辑。例如,`6-3.c`程序展示了如何在子进程中...

    linux进程管理(c语言)

    在Linux中,可以通过`fork()`函数创建新的进程,`fork()`返回两次,一次在父进程中返回新进程的PID(进程标识符),一次在子进程中返回0。另外,`exec()`系列函数(如`execl()`, `execv()`, `execvp()`等)用于替换...

    fork()编程fork()编程fork()编程

    在Linux和Unix操作系统中,`fork()`函数是创建新进程的核心机制。`fork()`编程是系统调用的一个重要部分...同时,`fork()`与其他进程控制函数(如`wait()`, `exec()`等)的结合使用,能实现更复杂的进程间交互和控制。

    Linux下用C语言实现ls命令

    例如,`unistd.h`包含了如`fork()`、`exec*()`系列函数的声明,`sys/wait.h`则包含了等待子进程结束的`waitpid()`函数的声明。 #### 2. 使用`fork()`创建子进程 在主进程中调用`fork()`函数可以创建一个新的进程,...

    Linux进程编程介绍 Linux进程编程介绍.TXT

    在Linux中,控制进程的主要方法包括创建新进程、终止进程以及父子进程间的通信等。 1. **创建新进程**:主要通过`fork()`系统调用来实现。`fork()`创建一个与父进程几乎完全相同的子进程,子进程继承了父进程的数据...

    了解与进程控制相关的各种系统调用,加深对进程的状态变迁与进程调度的理解

    本实验主要关注与进程控制相关的四个关键系统调用:`fork`、`exec`、`exit`和`wait`,以帮助理解进程的状态变迁和调度。 1. **fork系统调用**: `fork()`用于创建一个新的进程,即父进程的副本。在调用`fork()`后...

    c语言进程管理器源码

    通过学习和分析这段代码,开发者可以更深入地理解操作系统如何管理和控制进程,这对于系统编程和性能优化都是非常有价值的。 为了调试和分析这个C语言进程管理器,我们需要查看源代码文件"Process"。这个文件可能...

    linux进程编程介绍

    Linux提供了丰富的系统调用接口,如`fork`、`exec`、`wait`、`exit`、`clone`等,以及C库函数如`system`、`popen`、`pclose`等,供程序员进行进程管理。 总之,Linux进程编程涵盖了系统资源的分配、进程间的通信与...

    Linux 进程通信

    【Linux 进程通信】 ...- **实时调度策略**:用于实时应用,可以更精细地控制进程的调度。 理解这些基本概念和系统调用是编写高效、可靠的多进程应用程序的基础,它们使得Linux成为一个强大而灵活的多任务操作系统。

    Linux进程控制详解及实例

    在这个主题中,我们将深入探讨几个关键的Linux进程控制函数,包括fork()、exec家族、wait()和exit(),并提供实例来解释它们如何协同工作。 首先,`fork()`函数是创建新进程的基础。当一个进程调用`fork()`时,操作...

    实验二 进程控制1

    实验涉及的关键技术包括Linux命令、进程创建、管理和删除,特别是fork、exec、exit、pause和wait等系统调用,以及VIM编辑器的使用。 在Linux中,进程的创建是通过fork系统调用来实现的。`fork()`调用成功会创建一个...

    操作系统实验1 进程控制

    在Linux环境下,这通常涉及`fork()`、`exec()`、`wait()`和`signal()`等系统调用。`fork()`用于创建新的进程,`exec()`用于替换当前进程的执行体,加载新的程序;`wait()`则用于父进程等待子进程结束;`signal()`...

    Linux C函数参考 进程操作篇

    本篇主要探讨了Linux C函数在进程管理方面的应用,包括进程创建、进程通信、进程同步与互斥、进程控制等核心概念。 一、进程创建 在Linux中,创建新进程最常用的方法是使用`fork()`函数。`fork()`会创建一个与调用...

    进程管理 C 对于进程进行管理

    2. **进程执行**:创建进程后,我们可以使用`exec()`系列函数(如`execl()`, `execlp()`, `execle()`, `execv()`, `execvp()`等)来替换进程的内存空间,使得进程执行新的程序。这些函数接收不同的参数,但基本思路...

    Linux C语言函数大全.zip

    7. **进程控制**:`fork`用于创建子进程,`exec`系列函数(如`execl`, `execlp`, `execle`, `execv`, `execvp`, `execvpe`)用于在进程中执行新的程序。`wait`和`waitpid`用于等待子进程结束并获取其退出状态。 8. *...

    第8章linux进程操作

    Linux 进程管理涉及创建、执行、监控和控制进程的能力。进程是 Linux 操作系统中最基本的单元之一,通过进程可以实现并发处理,提高系统的整体性能。进程操作函数提供了丰富的接口来管理进程,如创建新进程、执行...

    Experiment03_父子进程同步与子进程重载.pdf

    在这个实验中,学生将学习如何在Linux环境下使用特定的系统调用来管理和控制父子进程之间的交互。 首先,实验的目标是让学生掌握以下几个关键知识点: 1. **获取进程ID**:使用`getpid()`系统调用可以获取当前进程...

Global site tag (gtag.js) - Google Analytics