linux系统如何停止父进程

本文介绍了解决Linux服务器上特定服务启动失败的问题,详细讲述了如何定位并清除占用指定端口的顽固进程,包括查找父进程并终止的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题描述

 看到linux服务器上一个服务总是起不来,于是用netstat看了一下端口是否被占用,结果显示进程的端口8835确实被占用,但是我把这个进程杀掉之后,再看了一下端口占用的情况,发现8835端口依然被占用,占用该端口的进程仍然存在,并且换了一个进程号。
于是考虑到是有父进程存在,导致这个占用端口的子进程无法简单地通过kill进程号来杀除。

二、解决过程

先来看看进程占用的情况:

可以看到服务器的8835端口被进程号为15685的进程占用了

我们看一下这个进程的父进程

命令:ps -ef | grep 子进程号


第三列就是父进程的pid

kill -9 23995(父进程的pid)

再kill 子进程,就ok了。

最后吐槽一下,网上对于这种情况的结论,一上来就是哎呀你这个服务器中了木马了,准备重装系统吧。

真的是匪夷所思呀。









### Linux父进程与子进程的概念 在Linux系统中,进程被定义为程序的一次执行过程,具备动态性和并发性的特性[^3]。每当一个新进程被创建时,该进程会有一个唯一的标识符——PID(Process ID),并且每个进程都有一个对应的父进程ID(PPID)。当提到父进程和子进程的关系时: - **父进程**是指那些通过特定方式创建了另一个进程进程。例如,在用户登录到系统之后,`systemd` 或 `init` 创建了一个新的 `bash` 进程作为当前用户的交互shell,这个`bash` 就成为了用户下所有后续启动进程的初始父进程[^2]。 - **子进程**则是指由某个现有进程所创建的新进程实例。通常情况下,子进程是由其父进程利用诸如 `fork()` 系统调用来复制自己而产生的副本;此时,子进程中几乎包含了与其父进程相同的数据结构,但拥有独立的内存空间以及不同的 PID 和 PPID 值[^1]。 #### 关系说明 父子进程之间存在紧密联系的同时也保持相对独立的状态。具体表现在以下几个方面: - **资源共享**:尽管两者共享某些属性如文件描述符、工作目录等,但是它们各自维护着一套完整的上下文信息,比如寄存器内容、堆栈指针等等。这意味着即使是在同一时刻读取相同的全局变量,两个进程也会得到各自的拷贝而不是互相干扰的结果。 - **通信机制**:为了实现必要的协作功能,Linux 提供了一系列用于进程间通讯的方法(IPC), 包括信号量(semaphore)、消息队列(message queue)、管道(pipe)等形式。此外,环境变量也是常见的跨代传递手段之一,因为父进程设置好的环境配置能够自然地传给它的每一个后代成员[^4]。 - **生命周期管理**:一旦子进程完成任务并终止,则它不会立即消失而是进入僵尸(zombie)状态等待回收。这时只有父进程有权对其进行清理操作(通常是通过 wait() 函数家族来获取退出码); 如果父进程先于子进程结束的话, 那么孤儿(orphaned) 的子进程将会被 init (PID=1)接管直至正常关闭为止。 ```c #include <stdio.h> #include <unistd.h> int main(){ pid_t child_pid; printf("Parent process starting\n"); child_pid = fork(); // Create a new process if(child_pid != 0){ // Parent Process Code Block sleep(5); printf("This is the parent process.\n"); }else{ // Child Process Code Block printf("This is the child process.\n"); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值