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 在另一个进程中没有意义。
相关文章推荐
- Myeclipse2015 离线集成axis2插件
- Java中write(int)和writeInt(int)的区别,writeBytes(String) 和writeChars(String) 区别
- struts2 action配置时 method 省略不写 默认执行方法是父类ActionSuppot中的execute()方法
- [python] python扫描网段IP
- Yii 2 初体验
- 浅谈Java泛型中的extends和super关键字
- Excel数据导出,Java自定义注解
- Python Looping enumerate, reversed, sorted, iteritems, zip
- 如何调用已经写好的Python脚本
- Eclipse快捷键大全(转载)
- Python:循环语句
- 在MyEclipse中安装JBoss
- 【转】一名大学生的PHP进阶之路
- PHP 流程
- Spring 攻略第001讲续
- 解决Eclipse中Java工程间循环引用而报错的问题
- Python 标准日期格式
- 实用代码段( 一 )
- POCO下的日志库封装成可以根据日期创建文件的单例类
- python——python manage.py runserver执行错误