如何通过命令行而不是键盘按键来使用 Ctrl +Z?

如何通过命令行而不是键盘按键来使用 Ctrl +Z?

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

相关内容