我使用ssh连接到服务器,然后使用“screen”命令创建一个屏幕。 然后我运行Matlab脚本:“matlab< NameofFile.m”,Matlab开始运行脚本。
我退出屏幕(使用Ctl + a + d)并断开与服务器的连接。然后,当我再次连接到服务器并检查我创建的屏幕时,显示Matlab是runnig,但是当我使用命令“top”时,提供的信息表明我在屏幕上运行的进程处于睡眠模式(S )。
如何使用屏幕保持进程运行,以便当我离开屏幕时,进程正常运行(即,当我使用命令“top”时指示“R”)?
提前感谢您提供的任何帮助。
答案 0 :(得分:1)
请参阅线索进行讨论,此处为后人回答。
睡眠是一种正常的过程状态,只要进程等待某些事情(通常是I / O)就会发生。该进程保留在就绪队列中,并在等待完成后运行。所以我对你的睡眠过程并不感到惊讶。
也就是说,您的脚本可能完全受CPU限制,例如:( while :; do :; done ) & ps e $!
- 它将始终显示R
。完全受CPU限制的进程非常罕见 - 它们实际上必须在某些时候输出一些有用的东西,而这样的I / O会将它们移动到休眠状态。而且,即使它们长时间不输出,通常还有其他进程争夺CPU,内核将强制抢占。 (除非你有一个非常具体的nice
级别或一个非常特殊的内核配置,它允许你的非输出生成CPU脚本完全占用CPU。这是一个非常非常罕见的情况。)
如果要更好地监控状态更改,可以使用top -d .01 -pPID
(将PID替换为实际进程ID)。这让你测量它是否正在长时间睡眠或者在与另一个进程争用时击中CPU。如果您有prstat
或latencytop
命令,则可以查看每个LAT
(例如prstat -m 2
),这将告诉您进程遇到多少争用。越接近0,争用就越少。
回答“如何让流程继续运行”的一般问题,可以做到:nohup matlab < script.m &
。即使在终端断开连接之后,这仍然保持进程。但是使用screen
表示您不需要这样做,因为screen
管理终端会话,并且matlab
知道,屏幕仍然连接。