如何杀死隐藏进程?
How to kill hidden process?
我有以下脚本。
#!/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 }' > dms.log
sleep 1
# save PIDs for hostapd
ps -ef | grep "hostapd" | awk '{print }' > 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
我使用 bash 启动 AP (hostapd) 的脚本,然后它会执行其他一些命令。不幸的是,一旦 AP 启动,接下来的几行将不再执行。为避免此问题,我在脚本中使用 screen 命令启动 AP,该命令允许 运行 AP 在后台运行,还允许执行下一行。
for 循环中的每次迭代,都必须重新启动 AP。为此,我写出了 screen 和 hostapd 的 PID,然后我调用我的 C 程序来终止这些进程。最后我再次使用screen命令,确保后台AP已经停止,可以再次启动
这个实现效果很好。然而,当脚本结束并且所有进程都已被终止时,AP 在其他设备中消失,几分钟后它再次出现并发生多次。只有系统重启才能完全停止AP。
我使用 htop 找出 运行s AP 的进程。但是,我找不到进程。 htop 说没有进程,这是我使用上面的脚本创建的。这是对的,因为脚本一旦完成就会终止进程。
所以,我想我的 AP 有隐藏的进程,但我没有看到它们。有没有办法找到隐藏的进程并杀死它们以停止 AP?
当我在另一个终端启动 AP,然后使用 CTRL+C 停止它时,AP 将停止,我的设备不再看到它。
这就是为什么我认为屏幕启动了一个隐藏进程,htop 或 htop 等其他程序无法找到它。
如果您根本不需要任何 hostap 进程,我宁愿使用 pkill 而不是信任 pids 的管理。最简单的用法应该是这样的:
pkill -f hostap
pkill -f screen
如果您想使用其他信号,例如 9,请使用:
pkill -9 -f hostap
pkill -9 -f 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 }' > dms.log
sleep 1
# save PIDs for hostapd
ps -ef | grep "hostapd" | awk '{print }' > 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
我使用 bash 启动 AP (hostapd) 的脚本,然后它会执行其他一些命令。不幸的是,一旦 AP 启动,接下来的几行将不再执行。为避免此问题,我在脚本中使用 screen 命令启动 AP,该命令允许 运行 AP 在后台运行,还允许执行下一行。
for 循环中的每次迭代,都必须重新启动 AP。为此,我写出了 screen 和 hostapd 的 PID,然后我调用我的 C 程序来终止这些进程。最后我再次使用screen命令,确保后台AP已经停止,可以再次启动
这个实现效果很好。然而,当脚本结束并且所有进程都已被终止时,AP 在其他设备中消失,几分钟后它再次出现并发生多次。只有系统重启才能完全停止AP。
我使用 htop 找出 运行s AP 的进程。但是,我找不到进程。 htop 说没有进程,这是我使用上面的脚本创建的。这是对的,因为脚本一旦完成就会终止进程。
所以,我想我的 AP 有隐藏的进程,但我没有看到它们。有没有办法找到隐藏的进程并杀死它们以停止 AP?
当我在另一个终端启动 AP,然后使用 CTRL+C 停止它时,AP 将停止,我的设备不再看到它。
这就是为什么我认为屏幕启动了一个隐藏进程,htop 或 htop 等其他程序无法找到它。
如果您根本不需要任何 hostap 进程,我宁愿使用 pkill 而不是信任 pids 的管理。最简单的用法应该是这样的:
pkill -f hostap
pkill -f screen
如果您想使用其他信号,例如 9,请使用:
pkill -9 -f hostap
pkill -9 -f screen