我使用 ssh 连接到服务器,然后使用“screen”命令创建了一个屏幕。
然后我使用“matlab < NameofFile.m”运行一个 Matlab 脚本,然后 Matlab 开始运行该脚本。
我注销屏幕(使用 Ctl+a+d)并断开与服务器的连接。然后,当我再次连接到服务器并检查我创建的屏幕时,出现 Matlab 正在运行,但是当我使用命令“top”时,提供的信息表明我在屏幕上运行的进程处于 sleep 模式(S )。
如何让进程使用屏幕运行,这样当我离开屏幕时,进程正常运行(即,当我使用命令“top”时显示“R”)?
提前感谢您提供的任何帮助。
最佳答案
请参阅讨论主题,在这里为后代回答。
sleep 是一种正常的进程状态,只要进程等待某事(通常是 I/O)就会发生。该进程保留在就绪队列中,等待完成后将运行。所以我对你的进程 sleep 并不感到惊讶。
也就是说,您的脚本可能完全受 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
管理终端 session ,直到 matlab
知道了,屏幕还是连着的。
关于matlab - 让进程在不休眠的情况下使用屏幕运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19938818/