Linux Guard Service - 进程分裂与脱离
进程分裂更名
void set_ps_name(char *name) {
prctl(PR_SET_NAME, name);
}
修改进程长名称
备份进程环境变量空间
for (i = 1; i < argc; i++) {
argv_new[i] = strdup(argv[i]);
}
char **new_environ = malloc(env_len * sizeof(char *)); if (environ) {
unsigned int i = -1;
while (environ[++i])
new_environ[i] = strdup(environ[i]);
}
写入进程长名称
sprintf(argv[0], name);
还原进程环境变量
// for(i=1; i<argc; i++){
// sprintf(argv[i],argv_new[i]);
// } // for(i=0; i<env_len;i++){
// sprintf(environ[i],new_environ[i]);
// }
进程杀死后自动恢复
等级子进程的PID
void add_index(char **index, int i, pid_t pid) {
index[i] = (char *) malloc(sizeof(char) * 10);
sprintf(index[i], "%d", pid);
}
每隔一秒检查一次所有进程,为已经死亡的进程重新分裂并登记
char sub_name[50] = "/proc/0000000/cmdline";
sprintf(sub_name, "/proc/%s/cmdline", pid);
FILE *cmdline = fopen(sub_name, "r");
if (!cmdline) {
return 0;
}
--------------------------------------------
if (pid == 0) {
return i;
} else {
sprintf(index[i], "%d", pid);
父进程死亡后子进程自动结束
waitpid(-1, NULL, WNOHANG);
Service 的编写方法
[Unit]
Descryption=
[Service]
Type=forking
ExecStart=/usr/sbin/
[Install]
WantedBy=multi-user.target
Systemd 默认从目录
/etc/systemd/system/
读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录
/usr/lib/systemd/system/
真正的配置文件存放在那个目录。
systemctl enable命令用于在上面两个目录之间,建立符号链接关系。
使用multi-user.target控制后,system enable自动向启动段注册该服务
结果
启动服务
root 19924 1 0 00:47 ? 00:00:00 ./test [main] 00:00:05
root 19925 19924 0 00:47 ? 00:00:00 ./test [sub-01] 00:00:19
root 19927 19924 0 00:47 ? 00:00:00 ./test [sub-02] 00:00:18
root 19928 19924 0 00:47 ? 00:00:00 ./test [sub-03] 00:00:17
root 19930 19924 0 00:47 ? 00:00:00 ./test [sub-04] 00:00:16
root 19931 19924 0 00:47 ? 00:00:00 ./test [sub-05] 00:00:15
root 19932 19924 0 00:47 ? 00:00:00 ./test [sub-06] 00:00:14
root 19934 19924 0 00:47 ? 00:00:00 ./test [sub-07] 00:00:13
root 19935 19924 0 00:47 ? 00:00:00 ./test [sub-08] 00:00:12
root 19936 19924 0 00:47 ? 00:00:00 ./test [sub-09] 00:00:11
root 19937 19924 0 00:47 ? 00:00:00 ./test [sub-10] 00:00:10
root 19938 19924 0 00:47 ? 00:00:00 ./test [sub-11] 00:00:09
root 19940 19924 0 00:47 ? 00:00:00 ./test [sub-12] 00:00:08
root 19941 19924 0 00:47 ? 00:00:00 ./test [sub-13] 00:00:07
root 19950 1090 0 00:47 ? 00:00:00 sleep 60
root 19951 19924 0 00:47 ? 00:00:00 ./test [sub-14] 00:00:06
root 19953 19924 0 00:47 ? 00:00:00 ./test [sub-15] 00:00:05
RPM打包树
./rpmbuild
|-BUILD
|-RPM
|-SOURCES
|-SPECS
|-SPRMS
RPM SPEC文件写法
tagname: value
支持宏 %define
%转义字符%%
定义包的名称
name:tair
版本号
version:1.0
build路径
buildroot: %{_tmppath}/%{name}-%{version}-root
指定源代码
source:tair-1.0.src.tar.gz
构建前
%prep
%setup -q
将切换到构建所在的目录,通常是/usr/src/redhat/BUILD,然后解压,以包名命名的子目录
构建
%build
...(构建指令)
make
安装
%install
make install PREFIX=$RPM_BUILD_ROOT/usr/local
清理
%clean
rm -rf $RPM_BUILD_ROOT
指定文件列表
%file
...
前缀和后缀段
%pre为安装前执行
%post为安装后执行
%preun为卸载前执行
%postun为卸载后执行
注意
%files段自动将环境切换至
$RPM_BUILD_ROOT
即使写为/usr/等绝对路径,rpmbuild时依然会视为相对路径
解决
install -d $RPM_BUILD_ROOT/
cp -a * $RPM_BUILD_ROOT/
%install段是为%files段做准备用的,因此在环境切换之前,cp -a把所有文件拷贝到BUILDROOT中,因此%files段直接改写为/*,可以避免找不到路径的问题
结果
安装
检查未打包文件:/usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/test-1552227-1.0-1.0.x86_64
写道:/root/rpmbuild/SRPMS/test-1552227-1.0-1.0.src.rpm
写道:/root/rpmbuild/RPMS/x86_64/test-1552227-1.0-1.0.x86_64.rpm
执行(%clean): /bin/sh -e /var/tmp/rpm-tmp.V0GhQK
+ umask 022
+ cd /root/rpmbuild/BUILD
+ rm -rf /root/rpmbuild/BUILDROOT/test-1552227-1.0-1.0.x86_64
+ exit 0
cp /root/rpmbuild/RPMS/x86_64/*.rpm ./test-1552227.rpm
[root@localhost 1552227-000106]# rpm -ivh test-1552227.rpm
准备中... ################################# [100%]
准备安装test-1552227
正在升级/安装...
1:test-1552227-1.0-1.0 ################################# [100%]
完成安装test-1552227
[root@localhost 1552227-000106]#
卸载
[root@localhost 1552227-000106]# rpm -e test-1552227
准备卸载test-1552227
完成卸载test-1552227
[root@localhost 1552227-000106]#
makefile编写方法
调用rpm
为rpm建立打包树,把文件压缩后放入SOURCES
mkdir -p $(RPM_SYS_PATH){BUILD,SOURCES,SPECS,SPRMS,RPMS}
tar -zcvf $(S_NAME).tar.gz $(S_NAME)
cp $(S_NAME).tar.gz $(RPM_SYS_PATH)SOURCES/
调用rpmbuild
rpmbuild -ba $(ME).spec
/usr/1552227文件夹非空时保留
rmdir /usr/1552227
rmdir不会删除非空文件夹
向文件写入学号姓名
echo "1552227刘天辰">1552227.dat
Linux Guard Service - 进程分裂与脱离的更多相关文章
- Linux Guard Service - 守护进程再次分裂子进程
当系统区内存不能再申请新进程的时候申请会失败 在512MB内存下最多分配的子进程数 3331 [root@localhost 05]# ./test5-1 50000 expect 50000 sub ...
- Linux Guard Service - 守护进程分裂
分裂守护进程 由于fork()后第一行仍然在循环中,使用fork()返回值鉴别当前进程的性质 int i = 0; for (i = 0; i < 10; i++) { // sleep(1); ...
- Linux Guard Service - 杀死守护进程
杀死某个子进程 杀死守护进程的子进程后,改进程会变为僵尸进程 14087 ? Ss 0:00 ./test4-1 14088 ? S 0:00 \_ ./test4-1 14089 ? S 0:00 ...
- Linux Guard Service - 守护进程的作用、用途、父进程标识的特点
让test2直接成为守护进程 [root@localhost 02]# cat test2.c //test2 #include<stdio.h> #include<unistd.h ...
- Linux Guard Service - 前台进程和后台进程切换
把一个正在执行的程序放入后台 [root@localhost 01]# Ctrl+Z 此使程序被移动到后台,但不能继续输出(处于暂停态) [root@localhost 01]# ./test1-1 ...
- python实现Linux启动守护进程
python实现Linux启动守护进程 DaemonClass.py代码: #/usr/bin/env python # -*- coding: utf-8 -*- import sys import ...
- 在 CentOS7 上将自定义的 jar 包注册为 linux 服务 service
在 CentOS7 上将自定义的 jar 包注册为 linux 服务 service 1.在 /etc/rc.d/init.d/ 目录下创建一个名字和服务名完全相同的 shell 脚本文件 joyup ...
- Linux如何查看进程、杀死进程、启动进程等常用命令
Linux如何查看进程.杀死进程.启动进程等常用命令 关键字: linux 查进程.杀进程.起进程1.查进程 ps命令查找与进程相关的PID号: ps a 显示现行终端机下的所有程序,包括 ...
- 时隔两年最近再次折腾opensuse 的一些笔记 - opensuse linux java service shell
时隔两年最近再次折腾opensuse 的一些笔记 - opensuse linux java service shell opensuse 一些常用命令: service xxx start/s ...
随机推荐
- 汇编_指令_XCHG
交换指令XCHG是两个寄存器,寄存器和内存变量之间内容的交换指令,两个操作数的数据类型要相同,可以是一个字节,也可以是一个字,也可以是双字 .其指令格式如下: XCHG Reg/Mem, Mem/Re ...
- nginx学习1
访问abc.xxx.com就跳转到www.xxx.com/abc.html server { listen 80; server_name abc.xxx.com; rewrite ^.*$ ww ...
- DAG最长路径
1.DAG最长路径(不记录路径) int dfs1(int s) { )return dis[s]; ; i < G[s].size(); ++i) { int to = G[s][i]; di ...
- CFGym 100198G 题解
一.题目链接 http://codeforces.com/gym/100198/problem/G 二.题意 看样例就能明白,写表达式解析器. 三 .思路 一看这题目,立马就会想到“后缀表达式”,考虑 ...
- 解决Linux下MySQL登录ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor)问题
两种方案: 一: 1.修改mysql配置文件:vim /etc/my.cnf 2.找到[mysqld]下添加 skip-grant-tables 配置 3.重启服务service mysqld res ...
- Linux常用命令之-grep
简介 grep全称Global Regular Expression Print是一种强大的文本搜索工具,它能使用给定的正则表达式按行搜索文本输出,文件,目录等,统计并输出匹配的信息,grep在文本查 ...
- 「小程序JAVA实战」小程序视频展示页开发(52)
转自:https://idig8.com/2018/09/22/xiaochengxujavashizhanxiaochengxushipinzhanshiyekaifa51/ 这次说下,小程序的视频 ...
- IOS AudioServicesPlaySystemSound 后台锁屏播放
AudioServicesPlaySystemSound 想在锁屏后台播放报警提示音. 添加了UIBackgroundModes,audio,官方审核不通过! IOS的闹钟是怎么实现的,锁屏不能播放声 ...
- 2013年最后的收成:avalon1.0正式发布
大半年前我就说过,MVVM是前端究极的解决方案,因此之后我大多数时间都在折腾avalon,成立了专门的QQ群与感兴趣的一起讨论.感谢第一批吃螃蟹的人,avalon发展得很快,GITHUB上的贡献人数达 ...
- Jmeter Http接口性能测试
Jmeter Http接口性能测试 1. 启动Jmeter Jmeter下载解压即可使用,Jmeter启动,点击D:\ProgramFiles\jmeter\apache-jmeter-2. ...