Linux下进程与线程基础(一)

进程线程
1.什么是进程线程
a)电脑中的第一个进程怎么来的?
i.上帝造人
1.0号进程-------耶稣
2.耶稣(1号进程)建立了组织
3.1号进程
4.守护进程-----开始运行(daemon)(精灵进程)
5.用户进程可以开始运行了
b)现代计算机系统以进程为单位来执行任务的
2.进程的调用
a)启动进程的接口: system()
i.
ii.参数 :命令(字符串)
iii.返回值:-1 代表失败
b)例子:
System
|
Printf

|
./hello---->system同时被阻塞
|
Hello运行结束---->system得到信号,结束阻塞,继续运行
3.进程的状态
运行态 等待态 初始态 就绪态 终止态
4.进程监视器 ps
a j x
5.替换进程映像 exec
int execl(const char *path, const char *arg, …);
返回值:
参数:
Path:路径
Arg:参数
参数列表必须由NULL指针终止,并且由于这些是可变参数函数,因此必须强制转换此指针(char *)NULL。
6.fork----分叉
一次调用返回两次
看返回值判断父子进程
pid_t fork(void);
Pid_t :进程号的类型

父进程:返回一个子进程的pid;
子进程:返回0;
出错:返回-1
7.查看进程的pid号
Getpid — 获取本进程的PID号
Getppid – 获取父进程的PID号
8.僵尸进程
a)定义:子进程比父进程先退出—没人收尸,占用进程表的资源
b)Wait waitpid
1.pid_t wait(int *status);
返回值:返回值大于0,返回子进程的PID
返回值为-1,异常
参数:存储子进程的退出状态
9.进程间的关系
a)进程组是由进程组成的,是一个进程的集合
1.带头大哥:进程组的组长:进程树中的根进程来担任
ii.会话:进程组的集合,一般来说登录一次形成一个会话
会话中也是有个领头进程

12.信号

Linux下进程与线程基础(一)

信号分为可靠信号和不可靠信号31之前成为不可靠信号
31之后为可靠信号-------信号的可靠不可靠只与信号值有关,与函数无关
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
参数:signum:信号
Handler:捕捉到信号所要执行的一个函数
返回值:函数指针,失败返回SIG_ERR
32.处理信号的默认方式
i.SIG_IGN, 忽略
ii.SIG_DFL,默认方式
Linux下进程与线程基础(一)

程序进来之后:
1.signal开始运行
2.开始打印
3.输入一个SIGINT
4.Signal逮到信号SIGINT
5.使用my_action来处理信号
6.回到while循环
10.守护进程daemon
守护进程又称精灵进程----脱离终端
在你身后默默运行,脱离终端
守护进程由会话的领头进程来担任

11.守护进程创建的步骤
a)更改文件权限
b)创建子进程,让父进程直接退出
3)使用setid让子进程变成会话的领头进程
i.pid_t setsid(void);
ii.返回值:
4)忽略子进程退出的信号
i.Signal(SIGCHLD,SIG_IGN);
5)将工作目录改为根目录
i. int chdir(const char *path);
ii.参数:要更改的目录路径
iii.返回值:成功返回0 失败返回-1
6)重定向/dev/null