Advanced Programming in UNIX Environment Episode 3
2017-09-10 20:06
501 查看
程序
程序是一个存储在磁盘上某个目录中的可执行文件。内核使用exec函数(7个exec函数之一),将程序读入内存,并执行内存。
进程和进程ID
程序的执行实例被称为进程。
UNIX系统确保每个进程都有一个唯一的数字标识符,成为进程ID。进程ID总是一个非负整数。
进程控制
有3个用于进程控制的主要函数:fork、exec和waitpid。
线程和线程ID
通常,一个进程只有一个控制线程(thread)——某一时刻执行的一组机器指令。对于某些问题,如果有多个控制线程分别作用于它的不同部分,那么解决起来就容易多。另外,多个控制线程也可以充分利用多处理器系统的并行能力。
一个进程内的所有线程共享同一地址空间、文件描述符、栈以及与进程相关的属性。因为他们能访问同一存储区,所以各线程在访问共享数据时需要采取同步措施以避免不一致性。
与进程相同,线程也用ID标识。但是,线程ID只在它所属的进程内起作用。一个进程中的线程ID在另一个进程中没有意义。当在一进程中对某个特定线程进行处理时,可以使用该线程的ID引用它。
程序是一个存储在磁盘上某个目录中的可执行文件。内核使用exec函数(7个exec函数之一),将程序读入内存,并执行内存。
进程和进程ID
程序的执行实例被称为进程。
UNIX系统确保每个进程都有一个唯一的数字标识符,成为进程ID。进程ID总是一个非负整数。
#include <apue.h> #define BUFFSIZE 4096 int main(void) { printf("hello world from process ID %ld\n",(long)getpid()); exit(0); }
进程控制
有3个用于进程控制的主要函数:fork、exec和waitpid。
#include "apue.h" #include <sys/wait.h> int main(void) { char buf[MAXLINE]; pid_t pid; int status; printf("%% "); while(fgets(buf,MAXLINE,stdin)!=NULL) { if(buf[strlen(buf)-1]=='\n') buf[strlen(buf)-1]=0; if((pid==fork())<0) { err_sys("fork error"); } else if(pid==0) { execlp(buf,buf,(char*)0); err_ret("couldn't execute: %s",buf); exit(127); } if((pid==waitpid(pid,&status,0))<0) err_sys("waitpid error"); print("%% "); } exit(0); }
线程和线程ID
通常,一个进程只有一个控制线程(thread)——某一时刻执行的一组机器指令。对于某些问题,如果有多个控制线程分别作用于它的不同部分,那么解决起来就容易多。另外,多个控制线程也可以充分利用多处理器系统的并行能力。
一个进程内的所有线程共享同一地址空间、文件描述符、栈以及与进程相关的属性。因为他们能访问同一存储区,所以各线程在访问共享数据时需要采取同步措施以避免不一致性。
与进程相同,线程也用ID标识。但是,线程ID只在它所属的进程内起作用。一个进程中的线程ID在另一个进程中没有意义。当在一进程中对某个特定线程进行处理时,可以使用该线程的ID引用它。
相关文章推荐
- Advanced Programming in UNIX Environment Episode 24
- Advanced Programming in UNIX Environment Episode 15
- Advanced Programming in UNIX Environment Episode 20
- Advanced Programming in UNIX Environment Episode 25
- Advanced Programming in UNIX Environment Episode 17
- Advanced Programming in UNIX Environment Episode 22
- Advanced Programming in Unix Environment Episode 1
- Advanced Programming in UNIX Environment Episode 5
- Advanced Programming in UNIX Environment Episode 11
- Advanced Programming in UNIX Environment Episode 13
- Advanced Programming in UNIX Environment Episode 21
- Advanced Programming in Unix Environment Episode 2
- Advanced Programming in UNIX Environment Episode 4
- Advanced Programming in UNIX Environment Episode 14
- Advanced Programming in UNIX Environment Episode 7
- Advanced Programming in UNIX Environment Episode 10
- Advanced Programming in UNIX Environment Episode 26
- Advanced Programming in UNIX Environment Episode 9
- Advanced Programming in UNIX Environment Episode 18
- Advanced Programming in UNIX Environment Episode 19