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 ...
随机推荐
- 关于centos7.5部署oelinker_php版本的问题点汇总
1.下载开源版本https://github.com/eolinker/eoLinker-AMS-Lite-For-PHP到本地,将release文件夹内容copy到apache的/var/www/h ...
- javascript的创建对象object.create()和属性检测hasOwnPrototype()和propertyIsEnumerable()
Object.create("参数1[,参数2]")是E5中提出的一种新的对象的创建方式. 第一个参数是要继承到新对象原型上的对象; 第二个参数是对象属性.这个参数可选,默认为fa ...
- 在ubuntu 18.04下,无线网卡无驱动,连不上wifi,显示wifi没有适配器的解决方法
近来因为做东西要用到linux环境,所以自己的笔记本在win10的系统上又安装了ubuntu 18.04版本的双系统,但是安装好以后,没有无线网卡的驱动,显示wifi没有适配器等字样,很纠结,前后研究 ...
- Traits
'folly/Traits.h' Implements traits complementary to those provided in <type_traits> Implements ...
- 转 linux 下装 usb driver
http://www.george-smart.co.uk/wiki/Xilinx_JTAG_Linux
- Oracle 级联with admin option 和 with grant option
· 授权通过grant 语法:GRANT object_priv[(columns)][ON object] TO {user|role|public} [WITH GRANT OPTION] · 回 ...
- 同一客户端使用多份SSH Key
创建或添加如下内容: Host example1.com HostName realname.example.com IdentityFile ~/.ssh/example1_rsa # 私钥 Hos ...
- 利用MessageFormat实现短信模板的匹配
其实没什么技术含量,因为老是想不起来,所以在此文做下记录. 通常我们的应用系统中都会有很多短信的发送,或者是信息邮件等的推送,而这些信息却有着相同的共性,比如只是用户名换了下. 像下面这条,除了红色字 ...
- 3.Ehcache中储存缓存的方式
转自:https://www.cnblogs.com/crazylqy/p/4238148.html 目录 1 堆内存(MemoryStore) 1.1 指定可用内存 1.2 ...
- C#中DateTime详解
//2008年4月24日 System.DateTime.Now.ToString("D"); //2008-4-24 System.DateTime.Now.ToString(& ...