如何发送控件+;来自bash脚本的c?
我在bash脚本中启动了许多屏幕,然后在每个屏幕中运行django的如何发送控件+;来自bash脚本的c?,bash,gnu-screen,Bash,Gnu Screen,我在bash脚本中启动了许多屏幕,然后在每个屏幕中运行django的runserver命令。我希望能够以编程方式停止它们,这需要我将Control+c发送到runserver 如何从bash脚本发送这些击键?Ctrl+C发送一个SIGINT信号 kill-INT也发送一个SIGINT信号: # Terminates the program (like Ctrl+C) kill -INT 888 # Force kill kill -9 888 假设888是您的进程ID 请注意,kill 88
runserver
命令。我希望能够以编程方式停止它们,这需要我将Control+c
发送到runserver
如何从bash脚本发送这些击键?Ctrl+C发送一个SIGINT
信号
kill-INT
也发送一个SIGINT
信号:
# Terminates the program (like Ctrl+C)
kill -INT 888
# Force kill
kill -9 888
假设888
是您的进程ID
请注意,
kill 888
发送一个稍微不同的SIGTERM
信号,但也会要求程序停止。因此,如果您知道自己在做什么(程序中没有绑定到SIGINT
的处理程序),一个简单的kill
就足够了
要获取脚本中最后启动的命令的PID,请使用$代码>:
# Launch script in background
./my_script.sh &
# Get its PID
PID=$!
# Wait for 2 seconds
sleep 2
# Kill it
kill $PID
CTRL-C通常会向进程发送一个SIGINT信号,因此您可以简单地执行以下操作:
kill -INT <processID>
它基本上启动一个小时日志sleep
进程并获取其进程ID。然后在终止进程之前输出相关的进程详细信息
在一个小的等待之后,它会检查进程表以查看进程是否已经结束。从脚本的输出可以看出,它确实消失了:
===
PID is 28380, before kill:
UID PID PPID TTY STIME COMMAND
pax 28380 24652 tty42 09:26:49 /bin/sleep
===
./qq.sh: line 12: 28380 Terminated sleep 3600
===
PID is 28380, after kill:
UID PID PPID TTY STIME COMMAND
===
您可以使用以下命令获取特定进程(如MySQL)的PID:
ps-e | pgrep mysql
此命令将为您提供MySQL进程的PID。e、 g,13954
现在,在终端上键入以下命令。
kill-913954
这将终止MySQL的进程
pgrep -f process_name > any_file_name
sed -i 's/^/kill /' any_file_name
chmod 777 any_file_name
./any_file_name
例如,“pgrep-f firefox”将grep运行“firefox”的PID,并将此PID保存到名为“any_file_name”的文件中“sed”命令将在“any_file_name”文件的PID编号开头添加“kill”。第三行将使“any_file_name”文件可执行。现在第四行将终止文件“any_file_name”中可用的PID。在一个文件中写入上述四行并执行该文件可以执行control-C。对我来说,工作绝对正常。ctrl+C和kill-INT
并不完全相同
要模拟ctrl+c,我们首先需要了解其区别
kill-INT
将向给定进程发送INT
信号(通过其pid
找到)
ctrl+c被映射到intr
特殊字符,当终端接收到该字符时,该字符应将INT
发送到该终端的前台进程组。您可以通过以给定的
组为目标来模拟这一点。可以通过在kill命令中的信号前面加上一个-
来完成。因此,您需要的命令是:
kill-INT-
您可以使用脚本非常轻松地对其进行测试:
#/usr/bin/env ruby
叉子{
陷阱(:INT){
将“信号接收到子对象中!”
出口
}
睡1000
}
将“run`kill-INT-#{Process.pid}`放在任何其他终端窗口中。”
等等
资料来源:
Per:如果未指定信号,则发送术语信号,因此kill$PID
不会向进程发送SIGINT
,因此与Ctrl+C键盘不同event@Alex抢手货虽然我不认为有实际的区别,但我可能错了。根据命令的不同,如果它安装了SIGTERM或SIGINT的处理程序,那么它可能会有所不同。总之,正如@paxdiablo所说,使用kill-INT
、kill-SIGINT
或kill-2
@domen好的,我已经更新了答案,使其更精确。这取决于您是否希望将命令ctrl+c发送给其他进程作为输入。另请参阅如何获取像tomcat这样的特定进程的pid
pgrep -f process_name > any_file_name
sed -i 's/^/kill /' any_file_name
chmod 777 any_file_name
./any_file_name