进程

来源:互联网 发布:去水印软件免费版 编辑:程序博客网 时间:2024/06/11 11:31

在我看来,进程就是当系统在执行某个程序时,分配和释放的各种资源的过程(是过程,所以当程序退出时,进程也就结束了)!

进程和程序有什么区别呢???
程序是静态的,只是占用了一段内存空间,没有其他任何意义;

而进程是动态的,它是程序执行的过程。

 

ps -axj

苏嵌学习之进程process

上图是在终端输入ps -axj得到的结果的最上端

不按上图的顺序说,先说用最多的:PID进程号(Process Identity Number)唯一地标识一个进程
                                PPID:父进程号(Parent Process ID)很简单一个进程的父亲进程

                                PGID:进程组号(Process Group ID)

                                SID;TTY;UID不说了

                                STAT:状态(R:运行态  S:阻塞态  Z:僵尸态  T:暂停  D:不可中断

fork函数(完全复制进程,一块进行父进程,一块子进程)

要的头文件:#include <sys/types.h> // 提供类型pid_t的定义
          #include <unistd.h>

无参数;

返回值:0:子进程
        子进程PID(大于0的整数):父进程
        -1:出错

苏嵌学习之进程process苏嵌学习之进程process



 

vfork()函数(先做子进程,再做父进程,不用开辟一块新的内核空间)


exec函数

exec函数族提供了一种在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段。在执行完之后,原调用进程的内容除了进程号外,其他全部都被替换了。

int execl(const char *path, const char *arg, ...);
int execv(const char *path, char *const argv[]);
int execle(const char *path, const char *arg, ..., char *const envp[]);
int execve(const char *path, char *const argv[], char *const envp[]);(系统调用)
int execlp(const char *file, const char *arg, ...);
int execvp(const char *file, char *const argv[]);

总结下上面的几个函数:exec不动,v表示用数组,l表示用数组,p表示不使用绝对路径(系统会自动从环境变量“$PATH”所包含的路径中进行查找),e是你自己自定的环境变量;

返回值:-1 出错

举个系统调用的例子:

苏嵌学习之进程process

输出:

OK!(abc的功能就是输出OK!)

一秒延时

in parent ………………


exit()和_exit()

_exit()为系统调用,而exit()则是库函数调用,里面包含了_exit()还有很多其他的函数!


wait函数(成功返回进程号,失败返回-1)(一般不写参数)

   调用该函数使进程阻塞,直到任一个子进程结束或者是该进程接收到了一个信号为止。如果该进程没有子进程或者其子进程已经结束,wait函数会立即返回。

waitpid函数(功能更强大)(3个参数)

   功能和wait函数类似。可以指定等待某个子进程结束以及等待的方式(阻塞或非阻塞)
    函数参数: 

pid      pid>0:只等待进程ID等于pid的子进程,不管已经有其他子进程运行结束退出了,只要指定的子进程还没有结束,waitpid就会一直等下去。
         pid=-1:等待任何一个子进程退出,此时和wait作用一样。
         pid=0:等待其组ID等于调用进程的组ID的任一子进程。
         pid<-1:等待其组ID等于pid的绝对值的任一子进程。
status   同wait(一般不写)
options  WNOHANG:若由pid指定的子进程并不立即可用,则waitpid不阻塞,此时返回值为0
         WUNTRACED:若某实现支持作业控制,则由pid指定的任一子进程状态已暂停,且其状态自暂停以来还未报告过,则返回其状态。(一般不用)

         0:同wait,阻塞父进程,等待子进程退出。

原创粉丝点击