Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42843
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 330
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-28 17:39
文章分类
文章存档

2015年(31)

我的朋友

分类: C/C++

2015-11-01 18:58:16

1.
内核调度器:分配进程时间
进程标志符:进程的身份证号
进程控制块:进程的描述、控制、资源信息
状态:执行,就绪,等待

用到的一些命令:
ps -aux
jobs
fg 
ctrl +z
bg
&
pkill  
kill -9 进程号
nice

读取id函数:
getpid()
getppid()
getuid()
geteuid()
getgid()
getegid()

2.进程的创建:
2.1
int system(const char *str);
//调用shell来执行str命令,命令执行完后继续下面的指令

2.2
pid_t fork(void);
返回值pid_t==0:表示子进程
返回值pid_t>0:表示父进程
返回值pid_t<0:表示创建失败

子进程继承父进程的地址空间,拥有独立的进程号、计时器、资源使用等。

执行:子进程和父进程都在fork函数处继续往下执行。

2.3
exec函数:
extern char **environ;

int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg, ..., char *const envp[]);

int execv(const char *path, char *const  argv[]);
int execvp(const char *file, char *const  argv[]);
int execve(const char *file, char *const  argv[], char *const envp[]);

file可以是执行文件名(环境变量中搜索)
argv[] = {"full path", "param1", ... NULL};//含有路径,最后以NULL结尾
envp[] = {"name = val", ... , NULL };

将第一个参数指定的程序,覆盖现有的进程空间。
可变参数个数,用NULL标记最后一个

2.4
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream); //等待新进程的结束

command为可执行文件的全路径和执行参数
type:r表示将popen返回的文件流作为新进程的标准输出流,
w表示将popen返回的文件流作为新进程的标准输入流,

相当于执行了command,和当前进程进行信息交换。

3.进程控制
孤儿进程:父进程先退出,子进程就是孤儿进程,此时被pid为1的init进程接管
僵尸进程:子进程先退出,则子进程资源部会清理,退出的子进程为僵尸进程。

3.1
pid_t wait(int *status);//等待一个子进程退出,返回子进程id

3.2
pid_t waitpid(pid_t pid, int *status, int options);
pid=-1:表示等待所有的子进程
status:子进程退出状态,
WIFEXITED(stat_val):子进程正常结束,是一个非0值
WEXITSTATUS(stat_val):对于WIFEXITED(stat_val)非0,用来获取退出码

options,:WNOHANG表示不阻塞,

3.3
进程终止:
return:
exit: 清理缓冲区,文件写入,释放资源
_exit: 不清理缓冲区,释放资源
abort:
终止信号:ctrl+c, ctrl+\等

4.守护进程
终端:系统与用户交流的界面
从终端开始运行的进程依赖终端,终端关闭,进程也关闭。
守护进程:脱离终端,后台运行

创建过程:
4.1忽略SIGCHLD信号signal(SIGCHLD,SIG_IGN),创建子进程,父进程退出,
4.2子进程创建新回话,让进程摆脱父进程的会话、进程组、终端控制。使用setsid()函数;
4.3切换到/目录chdir("/");
4.4重设文件掩码umask(0);
4.5关闭文件描述符,这样终端与守护进程的信息输出就不相互影响
4.6使用syslog函数,查看/var/log/message的内容。


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

上一篇:信号

下一篇:linux通信

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