首页 > 系统相关 >Linux系统编程——09-linux-day08(守护进程-线程)

Linux系统编程——09-linux-day08(守护进程-线程)

时间:2022-11-08 14:35:50浏览次数:41  
标签:day08 创建 线程 Linux 进程 include 守护 out


在学习Linux系统编程总结了笔记,并分享出来。有问题请及时联系博主:​​Alliswell_WP​​,转载请注明出处。

09-linux-day08(守护进程-线程)

 

 

一、学习目标

1、守护进程的特点

2、熟练进行守护进程的创建

3、熟练掌握多线程的创建

4、熟练掌握线程的退出和资源回收

 

二、守护进程+线程

1、守护进程相关的概念

Linux系统编程——09-linux-day08(守护进程-线程)_进程组

 

Linux系统编程——09-linux-day08(守护进程-线程)_进程组_02

会话:进程组的更高一级,多个进程组对应一个会话。

进程组:多个进程在同一个组,第一个进程默认是进程组的组长。

创建会话的时候,组织不可以创建,必须是组员创建。

创建会话的步骤:创建子进程,父进程死去,子进程自当会长。

Linux系统编程——09-linux-day08(守护进程-线程)_#include_03

》setsid——调用后就成为会长

man 2 setsid

pid_t setsid(void);

Linux系统编程——09-linux-day08(守护进程-线程)_#include_04

 (例如:如果按照了mysql,可以通过ps aus | grep mysqld查看mysql的守护进程)

Linux系统编程——09-linux-day08(守护进程-线程)_#include_05

Linux系统编程——09-linux-day08(守护进程-线程)_#include_06

前2步骤是必须的!

 

2、守护进程创建

》需求:创建一个守护进程:每分钟在$HOME/log/ 创建一个文件,程序名.时间戳

>touch daemon.c

>vi daemon.c



1 #include<stdio.h>
2 #include<unistd.h>
3 #include<fcntl.h>
4 #include<stdlib.h>
5 #include<sys/types.h>
6 #include<sys/stat.h>
7 #include<string.h>
8 #include<signal.h>
9 #include<sys/time.h>
10 #include<time.h>
11
12 #define _FILE_NAME_FORMAT_ "%s/log/mydaemon.%ld" //定义文件格式化
13
14 void touchfile(int num){
15 char *HomeDir = getenv("HOME");
16 char strFilename[256]={0};
17
18 sprintf(strFilename,_FILE_NAME_FORMAT_,HomeDir,time(NULL));
19
20 int fd = open(strFilename,O_RDWR|O_CREAT,0666);
21
22 if(fd < 0){
23 perror("open err");
24 exit(1);
25 }
26 close(fd);
27 }
28
29
30 int main(int argc, char *argv[])
31 {
32 //创建子进程,父进程退出
33 pid_t pid = fork();
34 if(pid > 0){
35 exit(1);
36 }
37 //当会长
38 setsid();
39 //设置掩码
40 umask(0);
41 //切换目录
42 chdir(getenv("HOME"));//切换到家目录
43 //关闭文件描述符
44 //close(0),close(1),close(2);//方便调试,不关
45 //执行核心逻辑
46 //struct itimerval myit = {{60,0},{60,0}};
47 struct itimerval myit = {{60,0},{1,0}};//方便调试,初始改为1s
48 setitimer(ITIMER_REAL,&myit,NULL);
49 struct sigaction act;
50 act.sa_flags = 0;
51 sigemptyset(&act.sa_mask);
52 act.sa_handler = touchfile;
53
54 sigaction(SIGALRM,&act,NULL);
55
56 while(1){
57 //每隔1分钟在/home/wang/log下创建文件
58 sleep(1);
59 //do sth
60 }
61 //退出
62
63 return 0;
64 }



>gcc daemon.c

>./a.out

(打开另一个终端,ps aux查看a.out为守护进程,然后在原终端点叉子关闭a.out,在后打开的终端查看a.out仍然存在。,另外要进入log文件夹下查看目录是否仍然在目录。)

 

3、守护进程扩展了解

扩展了解:

  通过nohup指令也可以达到守护进程创建的效果。

  用法:nohup cmd [ > 1.log ] &

    nohup指令会让cmd收不到SIGHUP信号

    & 代表后台运行

>touch daemon1.c

>vi daemon1.c



1 #include<stdio.h>
2 #include<unistd.h>
3 #include<fcntl.h>
4 #include<stdlib.h>
5 #include<string.h>
6 #include<sys/types.h>
7 #include<time.h>
8
9
10 int main(int argc, char *argv[])
11 {
12 char strfileName[256] = {0};
13
14 while(1){
15 memset(strFileName,0x00,sizeof(strFileName));
16 sprintf(strFileName,"%s/log/zhen2.%ld",getenv("HOME"),time(NULL));
17 int fd = open(strFileName,O_RDONLY|O_CREAT,0664);
18 if(fd < 0){
19 perror("open err");
20 exit(1);
21 }
22 close(fd);
23 sleep(5);
24 }
25
26 return 0;
27 }



>gcc daemon1.c

>./a.out

>nohup ./a.out &

(显示:[1] 3451 忽略输入并把输出追加到'nohup.out';打开另一个终端输入ps aux查看,然后再终端点击叉子关闭,后打开的进程输入ps aux发现a.out仍然活着,另外要进入log文件夹下查看目录是否仍然在创建目录。)

 

4、线程有关的概念

 

 

5、线程的优点和缺点

 

 

6、创建一个线程

 

 

7、线程的退出

 

 

8、线程的回收

 

 

9、杀死线程

 

 

10、线程分离

 

 

11、线程属性设置分离

 

 

12、线程注意事项

 

 

13、线程同步的概念

 

 

14、mutex相关的函数

 

 

 

 

在学习Linux系统编程总结了笔记,并分享出来。有问题请及时联系博主:​​Alliswell_WP​​,转载请注明出处。

标签:day08,创建,线程,Linux,进程,include,守护,out
From: https://blog.51cto.com/u_15405812/5832966

相关文章

  • Linux系统编程——09-linux-day09(线程同步)
    在学习Linux系统编程总结了笔记,并分享出来。有问题请及时联系博主:​​Alliswell_WP​​,转载请注明出处。09-linux-day09(线程同步)  一、内容回顾1、守护进程:运行在后台,脱离......
  • Linux高并发web服务器开发——web服务器-3
    在学习Linux高并发web服务器开发总结了笔记,并分享出来。有问题请及时联系博主:​​Alliswell_WP​​,转载请注明出处。11_服务器开发-第03天(web服务器-3)  一、学习目标1、......
  • C基础学习笔记——第01天 linux介绍和基本命令
    在学习C基础总结了笔记,并分享出来。01-C基础第01天(linux介绍和基本命令) 目录和路径目录和路径的含义:目录:又称为文件夹,是包含所有的文件;路径:是反映目录和文件的位置【绝对......
  • 操作系统学习笔记——进程管理(进程与线程)
    在学习操作系统时对进程管理(进程与线程)特别困惑,所以总结了笔记,并分享出来,特别是蓝色和红色字体。有问题请及时联系博主:​​Alliswell_WP​​,转载请注明出处。 重点难点:进程......
  • linux 命令:more详解
    名称more-用于crt查看的文件阅读过滤器用法more[options]file...描述more是一个过滤器,用于一次一屏地翻阅文本。用户应该意识到less......
  • Linux:安装Ubuntu 20.4及问题处理
    1.Ubuntu系统下载镜像下载:个人推荐​​清华大学开源软件镜像站​​​。1.进入之后搜索Ubuntu,选择“ubuntu-releases”2.强烈推荐选择20.04版本(截至发文时间)3.选择“ubu......
  • Linux:Ubuntu更新源操作
    1.备份源文件#切换目录到apt下cd/etc/apt#备份源文件sources.listcp/etc/apt/sources.list/etc/apt/sources.list.backup2.登录国内公有源地址​​阿里源​​​​......
  • Linux:安装Ubuntu 20.4及问题处理
    1.Ubuntu系统下载镜像下载:个人推荐​​清华大学开源软件镜像站​​​。1.进入之后搜索Ubuntu,选择“ubuntu-releases”2.强烈推荐选择20.04版本(截至发文时间)3.选择“ubu......
  • linux 软链接和硬链接
    一、建立软链接用法:ln-s源文件目标文件。源:实际存放文件的位置例:ln-ssourcelink/123.txtlink-test1当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的......
  • Linux--环境使用问题汇集
    背景:因为有一段时间没有倒腾这个linux环境了,再次用的时候,即便之前有写操作文档,可是难免会遇到一些问题,现在就记录一下遇到的问题,以及解决方案问题一:在启动虚拟机的时候遇......