进程控制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程控制相关的知识,希望对你有一定的参考价值。

  

1进程标识符

(1)进程标识符的概念:每一个进程都有一个非负整数标识的唯一进程ID。ID为0表示调度进程,即交换进程,是内核的一部分,也称为系统进程,不执行任何磁盘操作。ID为1的进程为init进程,init进程不会终止,他是一个普通的用户进程,需要超级用户特权运行。

(2)进程标识符的函数

  #include <sys/types.h>
  #include <unistd.h> 
  pid_t getpid(void);    //调用进程的进程ID
  pid_t getppid(void);    //调用进程的父进程ID
  gid_t getgid(void);     //调用进程的实际组ID
  gid_t getegid(void);    //调用进程的有效组ID
  uid_t getuid(void);     //调用进程的实际用户ID
  uid_t geteuid(void);   //调用进程的有效用户ID

2 fork()函数

(1)函数原型

  #include<sys/tpyes.h>

  #include<unistd.h>

  pid_t fork(void);

(2)由 f o r k创建的新进程被称为子进程( child process)。该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是 0,而父进程的返回值则是新子进程的进程 I D.子进程和父进程举行执行fork调用后的指令,子进程是父进程的副本。子进程获得父进程的数据空间、栈和队的副本,父子进程不共享这些存储空间部分,共享正文段。子进程相当于父进程克隆了一份自己。 创建新进程成功后,系统中出现两个基本完全相同的进程,这两个进程执行没有固定的先后顺序,哪个进程先执行要看系统的进程调度策略。

3 exec()函数

    (1)概念:用fork函数创建子进程后,子进程往往要调用一种exec函数以执行另外一个程序。当调用exec函数时,该进程执行的程序完全替换为新进程,exec函数不新建进程,只是用一个全新的程序替换了当前的正文、数据、堆和栈段。执行完之后,进程ID不会改变。在进程间通信的时候,经常需要调用exec函数启动另外一个例程。

    (2)函数原型

  #include <unistd.h> 
  extern char **environ; 
  int execl(const char *path, const char *arg, ...);
  int execlp(const char *file, const char *arg, ...);
  int execle(const char *path, const char *arg,..., char * const envp[]);
  int execv(const char *path, char *const argv[]);
  int execvp(const char *file, char *const argv[]);
  int execve(const char *file, char *const argv[],char *const envp[]);

其中l表示列表(list),v标识矢量(vector)。execl、execlp、execle中每个命令行参数都是一个单独参数,这种参数以空指针结尾。execv、execvp、execve命令行参数是一个指针数组。e标识环境变量,传递参数。

4system函数

在程序中执行一个命令字符串

函数原型:

#include <stdlib.h>
int system(const char *command);

 

以上是关于进程控制的主要内容,如果未能解决你的问题,请参考以下文章

进程控制

什么是进程,什么是进程控制块(PCB)?

操作系统中的进程控制

进程控制

进程控制---PCB(进程控制块)

进程控制器常见的一些进程都有哪些