gpt4 book ai didi

unix - 当您在进程上按 ctrl+z 时会发生什么?

转载 作者:行者123 更新时间:2023-12-01 23:23:15 25 4
gpt4 key购买 nike

如果我正在运行一个长时间运行的进程,当我使用 Ctrl+Z 停止它时,我会在终端中收到以下消息:

76381 suspended  git clone git@bitbucket.org:kevinburke/<large-repo>.git

进程挂起时实际上会发生什么?状态是否保存在内存中?此功能是在操作系统级别实现的吗?当我使用 fg 重新启动进程时,该进程如何能够从中断处恢复执行?

最佳答案

当您在终端中按 Ctrl+Z 时,(伪)终端设备驱动程序(内核)的线路规则会发送 SIGTSTP 向终端设备前台进程组中的所有进程发出信号。

该进程组是终端设备的一个属性。通常,您的 shell 是定义哪个进程组是终端设备的前台进程组的进程。

在 shell 术语中,进程组称为“作业”,您可以使用 fgbg 命令将作业置于前台和后台并查找使用 jobs 命令了解当前正在运行的作业。

SIGTSTP 信号类似于 SIGSTOP 信号,只不过与 SIGSTOP 相反,SIGTSTP 可以通过一个过程。

收到此类信号后,进程将暂停。也就是说,它已暂停并仍然存在,只是在它被终止或发送 SIGCONT 信号以恢复执行之前不会再安排运行。启 Action 业的 shell 将等待其中进程组的领导者。如果它被挂起,wait() 将返回,指示进程已挂起。然后 shell 可以更新作业的状态并告诉您它已暂停。

$ sleep 100 | sleep 200 & # start job in background: two sleep processes
[1] 18657 18658
$ ps -lj # note the PGID
F S UID PID PPID PGID SID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 10031 18657 26500 18657 26500 0 85 5 - 2256 - pts/2 00:00:00 sleep
0 S 10031 18658 26500 18657 26500 0 85 5 - 2256 - pts/2 00:00:00 sleep
0 R 10031 18692 26500 18692 26500 0 80 0 - 2964 - pts/2 00:00:00 ps
0 S 10031 26500 26498 26500 26500 0 80 0 - 10775 - pts/2 00:00:01 zsh
$ jobs -p
[1] + 18657 running sleep 100 |
running sleep 200
$ fg
[1] + running sleep 100 | sleep 200
^Z
zsh: suspended sleep 100 | sleep 200
$ jobs -p
[1] + 18657 suspended sleep 100 |
suspended sleep 200
$ ps -lj # note the "T" under the S column
F S UID PID PPID PGID SID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 T 10031 18657 26500 18657 26500 0 85 5 - 2256 - pts/2 00:00:00 sleep
0 T 10031 18658 26500 18657 26500 0 85 5 - 2256 - pts/2 00:00:00 sleep
0 R 10031 18766 26500 18766 26500 0 80 0 - 2964 - pts/2 00:00:00 ps
0 S 10031 26500 26498 26500 26500 0 80 0 - 10775 - pts/2 00:00:01 zsh
$ bg %1
[1] + continued sleep 100 | sleep 200
$ ps -lj
F S UID PID PPID PGID SID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 10031 18657 26500 18657 26500 0 85 5 - 2256 - pts/2 00:00:00 sleep
0 S 10031 18658 26500 18657 26500 0 85 5 - 2256 - pts/2 00:00:00 sleep
0 R 10031 18824 26500 18824 26500 0 80 0 - 2964 - pts/2 00:00:00 ps
0 S 10031 26500 26498 26500 26500 0 80 0 - 10775 - pts/2 00:00:01 zsh

关于unix - 当您在进程上按 ctrl+z 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19074956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com