Linux下守护进程(daemon)和管道的结合使用(代码保留)
来源:互联网 发布:java中求最大公约数 编辑:程序博客网 时间:2024/05/18 00:01
环境:Vmware Workstation;CentOS-6.4-x86_64
程序实现的效果:
通过管道向管道中写入一个字符串“exit”,使守护进程退出。
步骤:
1、创建管道并记录所在的完整路径:
[negivup@negivup mycode]$ mkfifo fifo[negivup@negivup mycode]$ lsfifo[negivup@negivup mycode]$ pwd/home/negivup/mycode2、书写makefile文件:
.SUFFIXES:.c .oCC=gccSRCS=main.cOBJS=$(SRCS:.c=.o)EXEC=mainstart: $(OBJS)$(CC) -o $(EXEC) $(OBJS)@echo "--------------------------OK------------------------".c.o:$(CC) -Wall -o $@ -c $<clean:rm -rf $(OBJS) $(EXEC)3、编写源文件main.c:
#include <stdio.h>#include <unistd.h>#include <string.h>#include <errno.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int main(int argc, char *args[]){// 使用fork创建进程pid_t pid = fork();// 判断fork是否成功if (pid == -1){printf("Message : %s\n", strerror(errno));return -1;}if (pid > 0){// 1、父进程退出,使子进程成为孤儿进程exit(0);}else{// 2、取消进程和任何控制终端的关联setsid();// 下面的一下步骤是根据自己需要选择的,即使不选择,这个进程也是守护进程/////////////////////////////////////// 3、让根目录成为当前执行的目录chdir("/");// 4、设置进程的启动权限// 不继承启动程序用户的权限// 这样做的目的是保证这个进程能够被其他用户正常使用umask(0);// 5、关闭不需要的文件描述符close(STDIN_FILENO);close(STDOUT_FILENO);close(STDERR_FILENO);/////////////////////////////////////// 创建文件缓冲区char buf[1024];// 以只读的方式打开管道int fd = open("/home/negivup/mycode/fifo", O_RDONLY);// 判断管道是否打开成功if (fd == -1){printf("Message : %s\n", strerror(errno));return -1;}while (1){// 清空缓冲区内存memset(buf, 0, sizeof(buf));// 从管道中读取数据放到缓冲区中read(fd, buf, sizeof(buf));// 比较字符串,如果输入的是exit,那么退出循环if (strncmp(buf, "exit", 4) == 0)break;}// 关闭管道close(fd);}return 0;}4、编译并执行程序:
[negivup@negivup mycode]$ make 编译程序gcc -Wall -o main.o -c main.cgcc -o main main.o--------------------------OK------------------------ [negivup@negivup mycode]$ main 运行程序[negivup@negivup mycode]$ ps -u negivup 查看进程信息,此时存在进程main PID TTY TIME CMD 4887 ? 00:00:03 sshd 4888 pts/0 00:00:01 bash17662 ? 00:00:00 main17663 pts/0 00:00:00 ps[negivup@negivup mycode]$ echo "exit" > fifo 向管道中写入字符串“exit”[negivup@negivup mycode]$ ps -u negivup 查看进程信息,此时不存在进程main PID TTY TIME CMD 4887 ? 00:00:03 sshd 4888 pts/0 00:00:01 bash17670 pts/0 00:00:00 ps成功实现了通过管道关闭一个守护进程。
PS:根据传智播客视频学习整理得出。
0 0
- Linux下守护进程(daemon)和管道的结合使用(代码保留)
- Linux下的守护进程(daemon)(代码保留)
- linux 下(Daemon)守护进程
- Linux Daemon(守护进程)
- Linux下的fork和execve结合使用(代码保留)
- 守护进程daemon的创建和使用
- 守护进程daemon的创建和使用
- Linux下开发-守护进程(daemon)
- 守护进程(Daemon)
- 守护进程(Daemon)
- 守护进程(Daemon)
- 守护进程(daemon)
- 守护进程(Daemon)
- 守护进程(daemon)
- 守护进程(daemon)
- 守护进程(Daemon)
- 守护进程(daemon)
- 守护进程(daemon) .
- POJ 3693 Maximum repetition substring(好题)
- Android Studio导入Project的方法
- centos 7 网络配置( 网关、dns、ip地址配置)
- NYOJ 16 矩形嵌套(DAG上的DP)
- C++: byte和int的相互转化
- Linux下守护进程(daemon)和管道的结合使用(代码保留)
- 重造轮子-random5到random7
- [Android]仿即时通信App界面的实现
- Linux环境使用xampp搭建DVWA渗透测试平台
- 欢迎使用CSDN-markdown编辑器
- java学习笔记多线程学习总结(下)
- Java线程进入
- message_flood
- 下拉刷新效果