📅  最后修改于: 2023-12-03 15:42:19.767000             🧑  作者: Mango
该题是Sudo GATE 2020 Mock II(2019年1月10日)的第18题,涉及Linux系统管理的基本知识,主要围绕“门”的利用展开。
假设有一个Linux系统,其中有一个用户“Alice”,需要对一个叫“door”的进程开放的门进行管理。在管理过程中,我们需要实现两种功能:
请编写一个Shell脚本,实现上述功能。
chmod
命令来实现权限管理;ps aux
命令来查找“door”进程并获取其进程ID,然后利用kill
命令来关闭进程;trap
命令来捕捉信号,以便在门被关闭时相应地做出响应。chmod
命令将此文件的权限设置为“777”,即所有用户都具有读写执行的权限;chmod 777 door.txt
ps aux
命令查找“door”进程,并获取其进程ID,然后利用kill
命令杀死进程;pid=$(ps aux | grep 'door' | grep -v 'grep' | awk '{print $2}')
kill -9 $pid
trap
命令来捕捉SIGHUP、SIGINT和SIGTERM信号,并在接收到信号时执行相应的操作。具体来说,当收到SIGHUP信号时,脚本将读取“door.txt”文件中的内容(如果进程还在),并将门关闭。当收到SIGINT和SIGTERM信号时,将门关闭并退出脚本。trap "{
if [ -n \"$pid\" ]; then
echo \"Closing the door\"
echo \"closed\" > door.txt
kill -HUP $pid
fi
}" SIGHUP SIGINT SIGTERM
while [ -f "door.txt" ] && [ "$(cat door.txt)" == "open" ]
do
echo "Door is open."
sleep 1
done
echo "Door is closed."
以上五个步骤是实现一个利用Shell脚本管理Linux进程“door”的门的基本流程。其中,第一个和第二个步骤与操作系统底层的权限管理系统相关,我们需要在Shell脚本中调用相应的系统命令来设置文件的权限和杀死进程;第三个和第四个步骤与Shell脚本语法相关,我们需要利用trap
命令来捕捉信号并执行相应的操作;第五个步骤则是通过一个循环来保证脚本能够在门保持打开状态时一直运行下去。