There are stopped jobs.
。这是python 2.x中可重现的场景:ctrl + c由解释器处理为异常。
ctrl + z “停止”该过程。
ctrl + d退出python以获取真实信息。
以下是一些实际的终端输出:
example_user@example_server:~$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
ctrl + z
[1]+ Stopped python
example_user@example_server:~$ exit
logout
There are stopped jobs.
Bash没有退出,我必须再次
exit
退出bash shell。Q:什么是“已停止的工作”,或者这是什么意思?
Q:可以恢复已停止的过程吗?
Q:问:第一个
exit
是否杀死已停止的作业?问:有没有办法第一次退出Shell? (无需两次输入
exit
)#1 楼
停止的作业是已暂时置于后台且不再运行但仍在使用资源(即系统内存)的作业。因为该作业未连接到当前终端,所以它无法产生输出并且没有从用户那里接收输入。您可以在bash中使用
jobs
内置命令(可能是其他shell)查看正在运行的作业。也一样示例:user@mysystem:~$ jobs
[1] + Stopped python
user@mysystem:~$
您可以使用
fg
(前景)bash内置命令恢复已停止的作业。如果您有多个已停止的命令,则必须通过在命令行上使用fg
传递jobspec number来指定要恢复的命令。如果仅停止了一个程序,则可以单独使用fg
:user@mysystem:~$ fg 1
python
此时,您将返回python解释器,并可以通过使用control-D退出。 br />
相反,您可以使用jobspec或PID对命令进行
kill
。例如:user@mysystem:~$ ps
PID TTY TIME CMD
16174 pts/3 00:00:00 bash
17781 pts/3 00:00:00 python
18276 pts/3 00:00:00 ps
user@mysystem:~$ kill 17781
[1]+ Killed python
user@mysystem:~$
要使用作业规范,请在数字前加上百分比(%)键:
user@mysystem:~$ kill %1
[1]+ Terminated python
如果您发出带有停止作业的退出命令,将给出您看到的警告。为了安全起见,这些作业将继续运行。这是为了确保您知道自己正在尝试杀死可能忘记了停止的作业。第二次使用exit命令时,作业将终止,shell退出。对于某些不打算以此方式终止的程序,这可能会导致问题。
在bash中,您似乎可以使用
logout
命令来终止停止的进程并退出。这可能会导致不想要的结果。还要注意,某些程序以这种方式终止时可能不会退出,如果您习惯这样做,则系统最终可能会消耗很多孤立的进程,从而浪费资源
请注意,您可以创建后台进程,如果需要用户输入,则该进程将停止:
user@mysystem:~$ python &
[1] 19028
user@mysystem:~$ jobs
[1]+ Stopped python
您可以像执行
Ctrl-z
中断所停止的作业一样,恢复并杀死这些作业。评论
我会对你的第二句话之以鼻。应该说:“由于作业已停止,因此无法采取任何措施–文件I / O,网络I / O,终端I / O或任何其他处理。”
–斯科特
14年8月15日在16:23
这对我有很大帮助。
– shellbye
2015年8月1日,下午2:26
优秀的帖子对任何人都有很大的帮助!
–乔治·乌多森
17年12月24日在22:15
#2 楼
问:什么是“停止的作业”,或者是什么意思?
停止的作业表示从键盘(挂起字符)接收到停止信号(
SIGSTOP
/ SIGTSTP
)的过程Ctrl-Z),命令(例如kill -STOP [PID]
)或其他进程(例如,当系统缺乏资源时的内核)并且处于暂停状态,因此它告诉系统停止/暂停一个进程,因此它不会执行任何执行/处理。活动的shell作业可以通过以下命令列出:
jobs
。问:可以恢复已停止的进程吗?
只有发送
SIGCONT
信号后,停止的进程才会恢复执行。这可以通过以下方式来实现:fg
(或fg ID
)将作业移至前台,使其成为当前作业; bg
使其在后台继续执行;或发送SIGCONT
信号(例如kill -CONT [PID]
)。 问:第一次退出会杀死已停止的作业吗?
第一次键入
exit
/ logout
或按Ctrl-D时, shell会打印一条警告消息,提示有关与您的终端相关联的当前活动作业,因此,如果没有您的允许,它不会通过再次确认操作来杀死您。如果启用了checkjobs
选项(shopt -s checkjobs
),它还可以列出作业及其状态。问:是否有办法第一次退出Shell? (无需两次进入出口)
您可以按两次Ctrl + D或按住它更长的时间,这将使Shell安静退出,从而迅速杀死当前已停止/正在运行的Shel作业。
或者丢弃它们(
disown
)留下它们或手动杀死它们:kill $(jobs -p)
。评论
请注意,SIGTTIN也可以停止进程。
– Alex D
20/12/23在6:06
评论
ctrl + shift + \也会使python退出。