Linux 进程编程

进程编程

1、getpid

函数的作用:获取进程的识别码、进程号

函数的原型:pid_t  getpid(void)

返回值:目前进程的进程号

头文件:#include

 

2、fork

函数的作用:创建一个进程

函数的原型:pid_t  fork(void)

函数的返回值:< 0:出错;

              = 0:表示当前创建的是子进程;

>0:表示当前创建的是父进程,返回值是子进程的进程号

 

3、vfork

函数的作用:创建一个新的进程

函数的原型:pid_t vfork();

特点:子进程先运行,退出,父进程才能进行;

 

4、execl

函数的作用:执行一个文件

函数的原型:int execl(const  char*path,const char *arg,…)

参数说明:path:代表文件的路径

          arg:表示argv[0] , argv[1]

           最后一个参数以NULL结束

返回值:成功函数没有返回;

        出错:-1;

 

5、execlp

函数的作用: execl()用来执行参数path字符串所代表的目录中找到符合参数file的文件名,找到后便执行该文件,第二个参数是利用数组指针来传递给执行文件,最后一个参数需要以空指针(NULL)结束。

函数的原型 :int execlp(const char *file, const char *arg, ...);

返回值:函数执行成功时没有返回值,执行失败时的返回值为-1.

 

6、execle

函数的作用: execl是用来执行参数path字符串所代表的文件路径,并为新程序复制最后一个参数所指示的环境变量。接下来的参数代表执行该文件时传递过去的argv(0)、argv[1]……,最后一个参数必须用空指针(NULL)作结束

函数的原型:int execle(const char *path,const char *arg, ..., char * constenvp[]);

返回值:函数执行成功时没有返回值,执行失败时的返回值为-1

 

7、execv

函数的作用: execv()用来执行参数filename字符串所代表的文件路径,第二个参数是利用数组指针来传递给执行文件,最后一个参数则为传递给执行文件的新环境变量数组。

函数的原型: int execv(const char *path,char *const argv[]);

返回值:函数执行成功时没有返回值,执行失败时的返回值为-1.

 

8、execvp

函数的作用: execvp()用来执行参数path字符串所代表的目录中找到符合参数file的文件名,找到后便执行该文件,第二个参数是利用数组指针来传递给执行文件。

函数的原型: int execvp(const char *file, char *const argv[]);

返回值:函数执行成功时没有返回值,执行失败时的返回值为-1.

 

9、execve

函数的作用: execve()用来执行参数filename字符串所代表的文件路径,第二个参数是利用数组指针来传递给执行文件,并且需要以空指针(NULL)结束,最后一个参数则为传递给执行文件的新环境变量数组。

函数的原型:int execve(const char *filename, char *const argv[ ], char *const envp[]);

返回值:函数执行成功时没有返回值,执行失败时的返回值为-1.

 

10、system

函数的作用:执行一个命令

函数的原型:int  system(const char*string)

 

11、waitpid

函数的作用:等待退出,等待信号,或者指定的进程结束

函数的原型:pid_t waitpid(pid_t pid, int *status, int options)

函数的参数:pid < -1:等待进程pid绝对值得任何子进程

            pid = -1:等待任何子进程,相当于wait

            pid = 0 :等待进程组识别码与目前进程相同的任何子进程

            pid > 0 :等待进程号为pid的子进程退出

            options:

WNOHANG 如果没有子进程退出,马上返回不等待

WUNTRACED:如果子进程进入暂停执行状态,马上返回

返回值:如果执行成功,返回子进程

        失败:-1

 

12、exit

函数的作用:正常结束程序

函数的原型:void exit(int status)

返回值:无

 

 

 

 

 

 

进程编程学习总结:

1、进程与程序的区别

(1)进程是动态的,程序是静态的

(2)进程是暂时的,程序是长久的

(3)进程与程序组成不同:进程的组成包括程序、数据和进程控制块

(4)进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;

                           通过调用关系,一个进程可包含多个程序;

2、什么是死锁?

多个进程因资源竞争而形成的一种僵局

 

3、创建一个进程有几种方法?

(1)调用fork()函数

(2)调用vfork()函数

 

4、fork()函数与vfork()函数有什么区别?

fork()函数创建的子进程将父进程的资源拷贝了一遍,父子进程把所有代码执行一遍

vfork()函数创建的子进程和父进程共享数据空间,不是重新拷贝

 

5、有哪几种函数可以返回子进程的进程号pid?

(1)fork()函数的返回值如果>0,那么即为子进程的进程号

(2)wait()函数成功返回值即为子进程的进程号

(3)waitpid()函数成功返回即为子进程的进程号

 

你可能感兴趣的:(Linux)