如果我正在运行一个长时间运行的进程,当我使用 Ctrl + Z 停止它时,我在终端中收到以下消息:
76381 suspended git clone git@bitbucket.org:kevinburke/<large-repo>.git
暂停流程时会发生什么?国家是否被记忆?此功能是否在操作系统级别实施?当我使用fg
重新启动它时,该过程如何能够从中断处继续执行?
答案 0 :(得分:10)
在终端中按 Ctrl + Z 时,(伪)终端设备驱动程序(内核)的线路规则发送{{1} }信号通知终端设备的前台进程组中的所有进程。
该进程组是终端设备的属性。通常,shell是定义哪个进程组是终端设备的前台进程组的进程。
在shell术语中,进程组称为“作业”,您可以使用SIGTSTP
和fg
命令将作业放在前台和后台,并查找当前正在运行的作业bg
命令。
jobs
信号与SIGTSTP
信号类似,只是与SIGSTOP
相反,SIGSTOP
可由流程处理。
收到这样的信号后,该过程暂停。也就是说,它已经暂停并且仍在那里,只有在它被杀死或发送SIGTSTP
信号以恢复执行之前,它不会被安排再运行。启动作业的shell将等待其中进程组的领导者。如果它被暂停,SIGCONT
将返回,表明该进程已暂停。然后,shell可以更新作业的状态并告诉您它已被暂停。
wait()