免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 595 | 回复: 0
打印 上一主题 下一主题

进程和同步 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:51 |只看该作者 |倒序浏览
进程概念

进程是一个正在执行的程序的实例,是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 <stdio.h>

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

int pclose(FILE *stream);

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP