SIGNALS
The following signals can be used to control stunnel in Unix environment:
SIGHUP
Force a reload of the configuration file.
Some global options will not be reloaded:
· chroot
· foreground
· pid
· setgid
· setuid
The use of the 'setuid' option will also prevent stunnel from binding to privileged (<1024) ports during configuration reloading.
When the 'chroot' option is used, stunnel will look for all its files (including the configuration file, certificates, the log file and the pid file) within the chroot
jail.
SIGUSR1
Close and reopen the stunnel log file. This function can be used for log rotation.
SIGUSR2
Log the list of active connections.
SIGTERM, SIGQUIT, SIGINT
Shut stunnel down.
#!/bin/bash
# Get the Byobu window number of the currently active window
window=$(tmux display-message -p '#I')
# Get the process ID (PID) of the foreground process running in the current window
pid=$(tmux list-panes -F '#{pane_active} #{pane_pid}' | grep '^1 ' | awk '{print $2}')
# If a PID was found, kill the process
if [ -n "$pid" ]; then
kill -9 "$pid"
echo "Killed process with PID $pid"
else
echo "No active foreground process found."
fi
我们将利用
bindkey
创建快捷方式和内置命令pgrep
和pkill
。作为附加信息/演示,我将使用ps
它的一些选项。我们走吧:
1.
ps
有一些有趣的参数,我们要重点关注的是T
,-C <command name>
和-o pid=
(是的,之后没有了=
!)。注意:整个段落旨在展示,以便轻松检查下一个解决方案的正确性。
ps T
打印当前终端中正在运行的进程。例如,我创建了/bin/phps
指向 PhpStorm 的临时符号链接,因此运行phps &
会在后台打开所提及的 IDE 实例。在一个终端中运行它后(>/dev/null 2>&1
添加后不会打印任何内容,&
表示“在后台运行”):(您可能还注意到当前终端中运行的后台作业数量从绿色变为
0
了红色!1!
)现在,它在第二个终端中的样子如下:
现在我们要尝试
ps -C <command name>
- 将我的 phps 作为搜索命令:在另一个终端我们有:
请注意,第二个终端是
pts/0
(查看上图),但在这两个终端上我们都收到了pts/1
结果(正确!)——因为那是我们运行命令的终端。由于这种行为,我开始使用它
ps T
——所以我们可以捕获当前终端中正在运行的PID
进程。我想要详细说明的最后一个参数是
-o pid=
。它是一个输出修饰符,它只是使ps
打印仅包含 PID,而不包含标题(第一行)。最简单的解释方式始终是视觉方式:所以 - 这里要做的最后一件事是将以上所有内容结合起来。我们将简单地使用
ps -C phps -o pid=
以下结果ps T
:在另一个终端中:
我们可以看到,我们实现了预期的结果 —— 我们可以捕获所选进程的 PID,但前提是它在当前终端中运行。
2. 我的真正解决方案是基于“pgrep”和“pkill”命令,因为它们更合适,但请注意,使用上述命令
ps
也可以。使用的主要原因
pgrep
是其内置参数-s 0
,记录为“仅匹配列出了进程会话 ID 的进程。会话 ID 0 被转换为 pgrep 或 pkill 自己的会话 ID。”。然后,让我们看看它的实际效果:
在第二个终端中:
如图所示 - 我们可以使用 实现我们之前所做的事情
ps
,但只需一个命令。pkill
与 类似pgrep
,因此它采用相同的参数。 让我们看看它是如何工作的 -在第二个终端中:正如预期的那样 - 它没有终止该进程,因为它不属于当前终端。现在来看看主控制台:
所以 - 我们终于得到了想要的结果。最后一步是将我们的命令绑定到快捷方式。
为了为 zsh 创建它,我们将使用以下命令:
(此特定示例将命令绑定到 CTRL+k 组合)
然后只需将其添加到您的
~/.zshrc
或/etc/zsh/zshrc
(用于全球采购) - 您就完成了。额外提示:请注意,默认情况下
pkill
(并且kill
事实上)会发送SIGTERM
信号(如果未指定),如果您的进程接受其他信号,您可以轻松利用它,方法是将其用作pkill 的附加参数。这样做的目的是正常--signal <NAME>
关闭进程。通常,特定守护进程接受的信号列表列在部分中。示例来自:man <NAME>
SIGNALS
man stunnel
可以使用命令轻松获取可用信号的列表
kill -l
。因此,如果您想使用相当于
kill -9 <PROCESS>
(等于kill -SIGKILL <PROCESS>
) - 只需在命令中添加--signal SIGKILL
(或简单地:) 。-9
pkill
~/bin/_byobu_kill_process.sh
:~/.bybou/keybindings.tmux
:是的,您可以创建自定义 Byobu 热键来终止当前活动的 Byobu 窗口中的前台进程。设置方法如下:
创建一个脚本来终止前台进程您需要编写一个小脚本来识别活动 Byobu 窗口中的前台进程并向其发送 kill -9 信号。
在您的主目录(或您喜欢的任何位置)中创建一个名为 kill_foreground_process.sh 的文件: