您的位置:首页 > 其它

Advanced Programming in UNIX Environment Episode 3

2017-09-10 20:06 501 查看
程序

程序是一个存储在磁盘上某个目录中的可执行文件。内核使用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引用它。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: