您的位置:首页 > 编程语言

UNIX 环境高级编程(六)—— 程序和进程

2016-06-03 15:10 295 查看

1. 基本概念

1.1 程序(program)

程序是一个存储在磁盘上某个目录中的可执行文件。

内核使用 exec 函数(七个 exec 函数之一),将程序读入内存。

1.2 进程(process)

程序的可执行实例被称为进程(process);

某些操作系统用任务(task)表示正在执行的程序。

UNIX 系统确保每个进程都有一个唯一的数字标识符,称为进程 ID(process ID)

进程 ID 总是一个非负数。

1.3 使用 C 接口获取进程 id

#include <uinstd.h>
#include <stdio.h>

int main(void){
printf("hello world from process ID %ld\n", (long)getid());
return 0;
}


2. 进程控制

int main(void){
char buf[MAXLINE];
pid_t pid;
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("could't execute: %s", buf);
exit(127);
}

if ((pid = waitpid(pid, &status, 0)) < 0)
err_sys("waitpid error");
}
return 0;
}


3. 线程和线程 ID

通常一个进程只有一个控制线程(thread)—— 某一时刻执行的一组机器指令。对于某些问题,如果有多个控制线程分别作用于它的不同部分,那么解决起来就容易得多。另外,多个控制线程也可以充分利用多处理器系统的并行能力。

一个进程内的所有线程共享同一地址空间、文件描述符、栈以及与进程相关的属性。因为它们能访问同一存储区,所以各线程在访问共享数据时需要采取同步措施以避免不一致性。

与进程相同,线程也用 ID 标识。但是,线程 ID 只在它所属的进程内起作用。一个进程中的线程 ID 在另一个进程中没有意义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: