Bash: 无法将 ctrl+c 发送到已启动的程序中
Bash: Cannot send ctrl+c into started program
我正在尝试编写一个 bash 脚本来启动一个程序,等待 x 秒,然后向程序发送 ctrl+c 信号以停止它。
该程序是 "trace-cmd"(它是 ftrace 的前端),在按下 ctrl+c 之前 records/traces 数据。
我已经找到了获取 trace-cmd 的 PID 并使用 kill 向其发送 SIGINT 信号的解决方案。然而,不知何故它不起作用。
这是我执行的命令(全部在一行中,只是为了便于阅读而格式化):
sudo trace-cmd record -p function -P $PID & echo $! > ./pid_trace.txt &
echo "[+] Stored PID:" $(cat ./pid_trace.txt) &
sleep $seconds; printf "Killing trace-cmd\n"; sudo kill -INT $(cat ./pid_trace.txt)
'echo' 只是为了测试,我使用了 txt 文件,因为我无法分配 $!变量的值。据我了解:使用“&”以便同时执行这些命令,而使用“;”以便他们在彼此之后执行。所以:我应该启动 trace-cmd,存储 PID 而不是启动时间,只有在计时器完成后才执行 kill。
在执行 trace-cmd 时按下 ctrl+c 信号时,可以看到特定的输出(基本上是跟踪被存储)。然而,在我的 bash 程序中我看不到它。我假设 kill 信号不是 "delivered" 或者 SIGINT 不是 trace-cmd 期望的信号(程序可以拦截这些信号吗?或者击键)
如有任何帮助,我们将不胜感激!
'sudo' 进程不会将 INT 信号传递给它的子进程。 CTRL/C 处理将 INT 信号传递给连接终端的 foreground
中的所有进程 运行。
尝试以下选项之一:
考虑在 sudo 上使用常规 kill(否 -INT
)。这将使用 TERM 信号,这将导致 sudo 终止子进程。
将INT
信号直接发送到frace(pkill -INT trace_cmd)
我正在尝试编写一个 bash 脚本来启动一个程序,等待 x 秒,然后向程序发送 ctrl+c 信号以停止它。 该程序是 "trace-cmd"(它是 ftrace 的前端),在按下 ctrl+c 之前 records/traces 数据。
我已经找到了获取 trace-cmd 的 PID 并使用 kill 向其发送 SIGINT 信号的解决方案。然而,不知何故它不起作用。
这是我执行的命令(全部在一行中,只是为了便于阅读而格式化):
sudo trace-cmd record -p function -P $PID & echo $! > ./pid_trace.txt &
echo "[+] Stored PID:" $(cat ./pid_trace.txt) &
sleep $seconds; printf "Killing trace-cmd\n"; sudo kill -INT $(cat ./pid_trace.txt)
'echo' 只是为了测试,我使用了 txt 文件,因为我无法分配 $!变量的值。据我了解:使用“&”以便同时执行这些命令,而使用“;”以便他们在彼此之后执行。所以:我应该启动 trace-cmd,存储 PID 而不是启动时间,只有在计时器完成后才执行 kill。
在执行 trace-cmd 时按下 ctrl+c 信号时,可以看到特定的输出(基本上是跟踪被存储)。然而,在我的 bash 程序中我看不到它。我假设 kill 信号不是 "delivered" 或者 SIGINT 不是 trace-cmd 期望的信号(程序可以拦截这些信号吗?或者击键)
如有任何帮助,我们将不胜感激!
'sudo' 进程不会将 INT 信号传递给它的子进程。 CTRL/C 处理将 INT 信号传递给连接终端的 foreground
中的所有进程 运行。
尝试以下选项之一:
考虑在 sudo 上使用常规 kill(否
-INT
)。这将使用 TERM 信号,这将导致 sudo 终止子进程。将
INT
信号直接发送到frace(pkill -INT trace_cmd)