Advanced Programming in UNIX Environment Episode 3

来源:互联网 发布:envi裁剪landsat8数据 编辑:程序博客网 时间:2024/05/18 09:08
  1. 程序
    程序是一个存储在磁盘上某个目录中的可执行文件。内核使用exec函数(7个exec函数之一),将程序读入内存,并执行内存。
  2. 进程和进程ID
    程序的执行实例被称为进程。
    UNIX系统确保每个进程都有一个唯一的数字标识符,成为进程ID。进程ID总是一个非负整数。

    #include <apue.h>#define BUFFSIZE 4096int main(void){    printf("hello world from process ID %ld\n",(long)getpid());    exit(0);}
  3. 进程控制
    有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);}
  4. 线程和线程ID
    通常,一个进程只有一个控制线程(thread)——某一时刻执行的一组机器指令。对于某些问题,如果有多个控制线程分别作用于它的不同部分,那么解决起来就容易多。另外,多个控制线程也可以充分利用多处理器系统的并行能力。
    一个进程内的所有线程共享同一地址空间、文件描述符、栈以及与进程相关的属性。因为他们能访问同一存储区,所以各线程在访问共享数据时需要采取同步措施以避免不一致性。
    与进程相同,线程也用ID标识。但是,线程ID只在它所属的进程内起作用。一个进程中的线程ID在另一个进程中没有意义。当在一进程中对某个特定线程进行处理时,可以使用该线程的ID引用它。

原创粉丝点击