守护进程
守护进程:
daemon进程。通常运行与操作系统后台,脱离控制终端。
一般不与用户直接交互。
周期性的等待某个事件发生或周期性执行某一动作。
不受用户登录注销影响。
通常采用以a结尾的命名方式。
守护进程创建步骤;
- fork子进程,让父进程终止。
- 子进程调用setsid()创建新会话
- 通常根据需要,改变工作目录位置chdir()
- 通常根据需要,重设umask文件权限掩码
- 通常根据需要,关闭/重定向文件描述符6.守护进程业务逻辑。while ()
使用案例:
线程
1.线程概念:
进程:有独立的进程地址空间。有独立的pcb。分配资源的最小单位。
线程:有独立的pcb。没有独立的进程地址空间。最小单位的执行。
ps -Lf 进程id —>线程号。 LWP -->cpu执行的最小单位。
2.线程共享:
独享栈空间(内核栈、用户栈)
共享./text./ data ./rodataa ./bsss heap —〉全局变量。(errno)
3.线程控制原语:
pthread_t pthread_self(void);
获取线程id。线程id是在进程地址空间内部,用来标识线程身份的ia号。
返回值: 本线程id
int pthread_create(pthread_t *tid,const pthread_attr_t *attr,void *(*start_rountn)(void *),void *arg);
参1:传出参数,表新创建的子线程id
参2:线程属性。传NULL表使用默认属性。
参3:子线程回调函数。创建成功,ptherad_create函数返回时,该函数会被自动调用。
参4:参3的参数。没有的话,传NULL
返回值:成功:0;失败:errno
使用案例:
循环创建N个子线程:
for (i = 0;i < 5; i++)
pthread_create(&tid,NULL,tfn,(void *)i); 将int类型i,强转成void *,传参。
退出当前线程:
void pthread_exit(void *retva1);
retva1:退出值。无退出值时,NULL
exit();退出当前进程。
return:返回到调用者那里去。
pthread_exit()退出当前线程。
设置线程分离
int pthread_detach(pthread_t thread) ;
thread:待分离的线程id
返回值:成功:0;失败:errno
杀死一个线程。需要到达取消点(保存点)
int pthread_cance1 (pthread_t thread);
thread:待杀死的线程id
返回值:成功:0;失败:errno
如果,子线程没有到达取消点,那么pthread_cance1无效。
我们可以在程序中,手动添加一个取消点。使用pthread_testcance1();成功被pthread_cance1()杀死的线程,返回-1.使用pthead_join回收。
线程控制原语
pthread_createI
pthread_self
进程控制原语
fork();
getpid();