理解Linux的进程
在UNIX中,进程是正在执行的程序.他行当于WINDOWS环境内的任务.每个进程包括代码和数据.
1.进程的建立 pid_t fork(void) fork()是将LINUX变成多任务系统的基础.
看这个程序片断 :
printf(“Hello!n“); pid=fork(): printf(“Hown“);
fork()调用后,系统产生一个该进程的副本,且两个进程同时执行.这个副本进程叫做原进程的子进程,而原进程叫做这个副本进程的父进程.还有,fork()调用后子进程和父进程的指针同时指向printf(“Hown“).
调用fork()后,返回一个pid_t型的pid,通常用来标示子进程和父进程.在子进程中pid为0,在父进程中,pid被置为一个合法的正整数.
看这个例子:
#include #include
main(){ pid_t pid; printf(“Calling fork!n“); pid=fork(); if(!pid) printf(“I am the child.“); else if(pid>0) printf(“I am the parant.n“); else printf(“fork failed.n“); } 在fork()后,用了三个分支来判断进程.
exec系列调用 在unistd.h中,有类似int execl(const char *path,const char *arg,...)的几个调用.和fork()调用不一样的fork()是产生了一个进程的内存拷贝,而exec系列调用则使用一个新的进程覆盖了原来进程的内存空间.
看这个例子:
#include #include
main(){ printf(“Excuting lsn“); execl(“/bin/ls“,“-l“,NULL); }
2.数据和文件描素符号的继承 子进程中所有的变量与父进程中保持一致. 子进程继承父进程的文件描述符号.
发布人:Crystal 来自:Linux开发指南