Control+如何Z通过命令行而不是键盘按键工作? (在 Linux 上)
我需要停止所有正在运行的终端并稍后恢复。
答案1
Control+Z写入控制字符susp
,它将信号SIGTSTP
(Linux amd64 上的数字 20、Solaris amd64 上的 24、FreeBSD amd64 上的 18...最好避免按数字引用信号,因为这不可移植)到前台的所有进程终端的进程组。
您可以使用 - 命令从命令行发送信号以停止进程kill
。
kill -s STOP <pid>
(其中<pid>
是要挂起的进程的 id),或者,如果您想使用特定名称来寻址程序的所有进程(从技术上讲,名称与给定扩展正则表达式匹配的所有进程):
pkill -STOP xterm
(其中xterm
是示例名称)。
当需要恢复进程时,SIGCONT
以同样的方式发送信号。
答案2
如果您想停止作为控制终端的所有进程/dev/pts/12
(包括在该终端和 shell 中运行的所有前台和后台作业),您可以执行以下操作:
pkill -STOP -t pts/12
这也将暂停会议负责人的职务。在某些情况下,该过程可能会自动恢复。例如,GNUscreen
一旦检测到会话领导者已被挂起,就会立即恢复会话领导者。
如果您想将 SIGTSTP 信号发送到该终端的前台进程组,^Z
您会这样做:
kill -s TSTP -- "-$pgid"
其中$pgid
是该前台进程组的进程组 ID。在列表中的 Linux 和 BSD 上,您可以通过运行以该终端作为其控制终端的任何进程的 id 来ps -o tpgid= -p "$pid"
找出它。$pid
在大多数系统上,任何这些进程也可以使用 找到它tcgetpgrp()
。
在这两种情况下,您都可以通过发送 SIGCONT 信号代替 SIGSTOP/SIGTSTP 来恢复这些进程。
答案3
STOP
向您想要挂起的进程发送信号。
您可以稍后发送CONT
信号来取消挂起的进程。
例如:
pkill -STOP terminal
这将暂停所有terminal
进程。
pkill -CONT terminal
这将取消挂起所有名为 的进程terminal
。