1

我使用 ssh 连接到服务器,然后使用“screen”命令创建了一个屏幕。然后我使用“matlab < NameofFile.m”运行一个 Matlab 脚本,然后 Matlab 开始运行该脚本。

我注销屏幕(使用 Ctl+a+d)并断开与服务器的连接。然后,当我再次连接到服务器并检查我创建的屏幕时,出现 Matlab 正在运行,但是当我使用命令“top”时,提供的信息表明我在屏幕上运行的进程处于睡眠模式(S )。

如何让进程使用屏幕运行,这样当我离开屏幕时,进程正常运行(即,当我使用命令“top”时显示“R”)?

提前感谢您提供的任何帮助。

4

1 回答 1

1

请参阅讨论主题,在这里为后代回答。

睡眠是一种正常的进程状态,只要进程等待某事(通常是 I/O)就会发生。该进程保留在就绪队列中,等待完成后将运行。所以我对你的进程睡眠并不感到惊讶。

也就是说,您的脚本可能完全受 CPU 限制,例如:( while :; do :; done ) & ps e $!-- 将始终显示R. 完全受 CPU 限制的进程极为罕见——它们确实必须在某些时候输出一些有用的东西,而这样的 I/O 会使它们进入休眠状态。而且,即使长时间不输出,通常还有其他进程在争夺CPU,内核会强制抢占。(除非您有一个非常特定的nice级别或非常特定的内核配置,让您的非输出生成 CPU 脚本完全占用 CPU。这是非常非常罕见的情况。)

如果想更好的监控状态变化,可以使用top -d .01 -pPID(将PID替换为实际的进程ID)。这让您可以判断它是否长时间休眠或与另一个进程争用 CPU。如果您有prstatorlatencytop命令,您可以查看LATfor each(例如prstat -m 2),它会告诉您该进程经历了多少争用。越接近 0,争用越少。

回答“我怎样才能让进程运行”的一般问题,可以这样做:nohup matlab < script.m &. 即使在终端断开连接后,这也使进程保持活动状态。但是使用screen意味着您不需要这样做,因为screen管理终端会话,并且据matlab了解,屏幕仍处于连接状态。

于 2014-01-15T16:01:38.763 回答