c - 如何杀死隐藏进程?

标签 c bash pid kill gnu-screen

我有以下脚本。

#!/bin/bash

if [ "$EUID" -ne 0 ]
  then
    echo '' 
    echo -e "\e[1;31m   Please run the script as root \e[0m"
    echo ''
  exit
fi

for run in {1..11}
do  
    echo -e '\e[1;32m   Initializing AP in backfround... \e[0m' 
    sudo screen -dmS hotspot
    sleep 5

    # start the AP in background
    echo -e '\e[1;32m   Starting AP in backfround... \e[0m'
    sudo screen -S hotspot -X exec ./start_hostapd.sh
    sleep 20

    # save PIDs for dmS
    ps -ef | grep "dmS" | awk '{print $2}' > dms.log
    sleep 1

    # save PIDs for hostapd
    ps -ef | grep "hostapd" | awk '{print $2}' > process.log
    sleep 1 

    echo -e '\e[1;33m   Running data... \e[0m'

    for run in {1..10}
    do  # send 10 times
        sudo /home/ubuntu/Desktop/send_data/run_data
        sleep 1
    done

    echo -e "\e[1;31m   Stopping sending... \e[0m"
    sleep 2

    echo -e "\e[1;31m   Quiting hotspot... \e[0m"
    sudo /home/ubuntu/Desktop/kill_dms/kill_dms
    sleep 5

    echo -e "\e[1;31m   Stopping AP... \e[0m"
    sudo /home/ubuntu/Desktop/kill_hostapd/kill_hostapd
    sleep 5

    echo -e '\e[1;31m   Wiping dead screens... \e[0m'
    echo
    sudo screen -wipe
    sudo screen -X -S hotspot quit
    sleep 5
done

我使用启动 AP (hostapd) 的 bash 脚本,然后它执行一些其他命令。不幸的是,一旦 AP 启动,接下来的几行将不再执行。为避免此问题,我在脚本中使用 screen 命令启动 AP,该命令允许在后台运行 AP,还允许执行下一行。

对于 for 循环中的每次迭代,AP 都必须重新启动。为此,我写出了 screenhostapd 的 PID,然后我调用我的 C 程序来终止这些进程。最后我再次使用screen命令,确保后台的AP已经停止,可以再次启动了。

这个实现效果很好。然而,当脚本结束并且所有进程都已被终止时,AP 在其他设备中消失,几分钟后它再次出现并发生多次。只有系统重启有助于完全停止 AP。

我使用 htop 找出运行 AP 的进程。但是,我找不到进程。 htop 说没有进程,这是我使用上面的脚本创建的。这是正确的,因为脚本一旦完成就会终止进程。

所以,我想我的 AP 有隐藏的进程,但我没有看到它们。有没有办法找到隐藏的进程并杀死它们以停止 AP?

当我在另一个终端启动 AP,然后使用 CTRL+C 停止它时,AP 将停止并且我的设备不再看到它。

这就是为什么我认为 screen 启动了一个隐藏进程,htop 或其他程序(如 htop)无法发现该进程。

最佳答案

如果您根本不需要任何 hostap 进程,我宁愿使用 pkill 而不是信任 pids 的管理。最简单的用法应该是这样的:

pkill -f hostap
pkill -f screen

如果您想使用其他信号,例如 9,请使用:

pkill -9 -f hostap
pkill -9 -f screen

https://linux.die.net/man/1/pkill

关于c - 如何杀死隐藏进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43664536/

相关文章:

c++ - UTF-8、Unicode 以及机器如何解释字节?

c - 在c中利用BOF?

c - 在c中与不同类型的对象堆叠

linux - bash with ssh 和 for i 语句

regex - 在 JQ 上应用正则表达式

C 中的计数排序 - 错误 : Use of undeclared identifier

linux - 如何在目录树中查找包含 2 到 3 个子目录的目录?

linux - 当存在多个用户进程时从 processid 获取用户

c - 操作系统、fork、共享内存和信号量

c - 如何在 C 编程中执行 Shell 脚本,接收反馈和处理器 ID,并关闭进程