Linux下为了防止应用挂掉,我们会设置服务进程来拉起这些应用。但某些流氓软件也会利用该机制使得它们被杀掉后能再被拉起来。本文讲述让这些进程不再被拉起的方法。
比如,有名称为recordmain.bin的进程,使用kill -9 杀掉它后,过几秒发现它又重新启动起来了。
用ps 命令可以看到它的进程id是2431,父进程id是611。说明该进程是由进程id为611的进程拉起来的。用ps命令可以看到该进程名称为main.sh,其父进程id为1。这说明了main.sh进程拉起了recordmain.bin进程。
我们继续对main.sh执行 kill-9 命令,结果发现过几秒main.sh又自动启动起来了 ,说明进程id为1的进程把它拉起来了。
我们继续使用ps -ef命令查看,可以看到进程id为1的进程是 /sbin/init进程。 /sbin/init是第一个进程,它是Linux系统初始化的第一个用户级进程。它的任务是读取/etc/inittab文件,初始化系统环境,并根据inittab文件中指定的运行级别启动其他进程和服务。
目前Linux流行使用Systemd来守护系统,而systemctl
是 Systemd 的主命令,用于管理系统。
列出所有服务的运行状态:
systemctl
可以看到有一项:
可以看到有个recordmain.service的服务。查看该服务状态
systemctl status recordmain.service
从CGroup可以看出就是这个recordmain.service服务启动了main.sh进程,然后main.sh又启动了recordmain.bin,所以要想让recordmain.bin不再被开机,可以执行下面命令:
#停止服务
systemctl stop recordmain.service
#关闭该服务自启
systemctl disable recordmain.service
#冻结该服务启动脚本
systemctl mask recordmain.service
执行完上述命令后,我们会发现进程recordmain.bin不再被拉起来了。
参考:
《Linux之systemd服务配置及自动重启》
《Linux系统开机启动项清理》
《systemctl命令详解》