Chinaunix首页 | 论坛 | 博客
  • 博客访问: 142026
  • 博文数量: 40
  • 博客积分: 1131
  • 博客等级: 少尉
  • 技术积分: 459
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-16 11:50
文章分类
文章存档

2012年(2)

2011年(38)

我的朋友

分类: 嵌入式

2011-07-26 15:16:28

进程概念

进程是一个正在执行的程序的实例,是linux的基本调度单位。有如下元素组成(状态,权限,资源):

程序的当前上下文(context),当前执行的状态

程序的信任状态或者说是访问权限

程序的当前执行目录,要访问的文件和目录

内存和其他分配的系统资源

进程标识号

进程号,process ID, PID, getpid()

父进程号,parent process ID, PPID, getppid()

真实用户ID, getuid()

有效用户ID, geteuid()

真实用户组ID, getgid()

有效用户组ID, getegid()

所有的进程追溯其祖先都会落到进程号为1的进程身上,这个进程是init进程。

init进程是内核自举后第一个启动的进程,它引导系统,启动守护进程并且运行必要的程序。

进程的真实ID和有效ID不相同的情况是正在运行中的程序设置了setUID或者setGID后出现的。

setUID和setGID程序的目的就是让用户能够执行具有特殊权限的程序。

除了进程,用户,和组ID外,系统调用和库函数还能够检索进程的其他属性,比如资源利用情况和执行次数( times, getrusage)

创建进程

system函数的原型是

通过把system传递给/bin/sh -c 来执行string说指定的命令,接着整个命令行(/bin/sh -c string)又传递给系统调用 execve。

fork函数的原型是,

子进程是父进程的准确副本(除了PID和PPID,父进程的超时设置(alarm),文件锁,或者未决信号)

如果fork执行成功,则向父进程返回子进程的PID,向子进程返回0。这意味着即使你只调用一次fork,他也会返回两次。

子进程和父进程是异步执行的,无法预计谁先执行,所以两者不能依赖条件。

exec函数族,

exec用被执行的程序完全替换了调用进程的映像。fork创建了一个新进程就产生了一个新的PID,exec启动的新进程,替换了原有的进程,因此,被执行进程的PID不会改变。

所以如果exec执行成功,则以下的代码将不会被执行,如果执行错误,则返回-1.

exec接受3个参数,path, argv, envp.

popen函数,

popen使用管道来工作,其它与system相似。

#include

FILE *popen(const char *command, const char *type);

int pclose(FILE *stream);

阅读(1108) | 评论(0) | 转发(0) |
0

上一篇:Make

下一篇:控制进程

给主人留下些什么吧!~~