“可中断睡眠”状态表示什么?


18

我让Firefox在Parted Magic LiveCD上运行,然后(可能)由于我不记得的按键组合,它很快从屏幕和任务栏/窗口列表中消失了。

然而:

  1. ps ax | grep firefox返回以下内容(和不需要的grep firefox行)。两者ps和GUI Task Manager都显示了看起来似乎没有变化的RSS,VM-SIZE和0%CPU使用率的Firefox。

    约翰多1916 36.6 14.0 923772 504372 tty1 Sl 13:30 12:15 firefox


  2. pstree | grep firefox 返回:

    init─┬─2* [ROX-Filer───firefox───25* [{firefox}]]


  3. strace -p 1916 返回,并且看起来永远停留在此行上:

    futex(0xac975608), FUTEX_WAIT_PRIVATE, 1, NULL

我从对ps中的STAT列值是什么意思的答案中了解到S(在Sl)指示进程处于interruptible sleep状态。

谁能详细说明状态是什么?

编辑

我将开始一个新问题,在我的发行版中有更多详细信息,以解决原始的第二个问题。


@Braiam-完成。我一直不愿意这样做,因为我第一次这样做,以某种方式帮助摆脱了问题,变成了基于我使用Parted Magic作为我的全职发行版的信念的讨论。我衷心希望这次不会发生这种情况:(
user66001

Answers:


18

@msw很好地解释了您的第二个问题,以及一些您的第一个问题:

B)建议采取任何相对容易的方法来重新获得任何形式的控制,以(至少)保存我在“私人浏览”模式下烦人打开的选项卡?

因此,我将尝试解决您的第一个问题:

A)详细说明状态是什么?

状态值Sl(这是一个小写的L):

   S    Interruptible sleep (waiting for an event to complete)
   l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)

                 过程的生命周期

PROCESS STATE CODES
   R  running or runnable (on run queue)
   D  uninterruptible sleep (usually IO)
   S  interruptible sleep (waiting for an event to complete)
   Z  defunct/zombie, terminated but not reaped by its parent
   T  stopped, either by a job control signal or because
      it is being traced
   [...]

在信号手册页man 7 signal以及本教程中的标题为:Linux进程状态,可以看到更多详细信息。


对理解内部工作非常有帮助!谢谢!+1
user66001

@ user66001接受答案。它也可以帮助我,谢谢。
muneeb_ahmed '18

8

您没有对Firefox进程做任何事情。之前它已经处于状态S。“不间断睡眠”实际上意味着空闲。该进程正在等待,并且将在收到输入时唤醒。除非您在忙碌时捕获它,否则这是进程的正常状态。

您已使窗口消失。也许您已将其发送到其他桌面。如何以“正常”方式恢复它完全取决于您的窗口管理器,而您并未指定。

您也许可以使用其他工具来检索窗口,但这在某种程度上取决于发生了什么以及窗口管理器是否配合。尝试wmctrl。首先使用列出Firefox窗口wmctrl -l | grep Firefox。注意第一列中的窗口ID,例如0x12345678。要将窗口带回到当前桌面,请使用wmctrl -R 0x12345678;或者,使用wmctrl -a 0x12345678切换到其桌面。要最大化它(它可以照顾屏幕外的窗口或缩小到单个像素),请运行wmctrl -r 0x12345678 -b add,maximized_vert,maximized_horz。或者,使用来移动窗口并调整窗口大小wmctrl -r 0x12345678 -e 1,50,100,1000,800。您可能需要取消阴影或取消隐藏窗口wmctrl -r 0x12345678 -b remove,shadedwmctrl -r 0x12345678 -b remove,hidden


谢谢Gilles-这听起来可能很不正常,但是我不确定我正在运行哪个Window Manager。可以是LXDE(在有关LXPanel的框中列出)吗?另外,wmctrl似乎在我的发行版中不可用-请原谅我的无知,但是可以下载并运行wmctrl还是必须安装它(依赖项等)?
user66001 2013年

@ user66001 LXDE是桌面环境。它的默认窗口管理器是Openbox(我不确定它是否支持其他窗口管理器)。如果您的发行版没有wmctrl,则可以尝试下载源代码并进行编译。它取决于一些库,但是它们都不是外来的,它们都应该由您的发行版提供。如果您有xdotool,它可能能够完成所有这些操作,或者至少可以做有用的一项,所以请尝试一下(请查看手册中的window命令以及桌面和window命令)。
吉尔(Gilles)'所以

嗯谢谢 xdotool两者都不是-当您的意思是“也许可以完成所有这些工作”时,您是在谈论编译wmctrl还是可以执行的操作?您能否指出我有关编译Linux源代码的推荐指南(Windows环境中的Linux新手指南)?
user66001 2013年

@ user66001我的意思是xdotool,它wmctrl具有相似的功能(就您在这里所需要的而言,它们在其他方面有所不同)。如果您不熟悉Linux,建议您发布包含更多软件包的发行版。如果您正在运行RHEL或CentOS或Scientific Linux之类的变体,则Repoforge上有一个软件包。如果要从源代码进行构建,请阅读此内容 -但是,如果可以找到一个软件包,则安装它会更容易。
吉尔(Gilles)'所以

哪个工具应该更易于构建有什么不同?另外,如果发行版中没有软件包管理器,则哪种类型的软件包?是否应该寻找(我想这是一个不合逻辑的问题,但以防万一我认为一个软件包只是一堆二进制文件,列出了依赖项,并且更改了配置,我想问这个是错的)?
2013年

2

X客户端可能会丢失其连接,并可能以某种方式不被通知。该过程通常会在套接字上等待,什么都不会发生,从而使它处于不间断的睡眠状态。

对于Firefox (以及某些其他程序,例如Gvim或Chrome,它们为存储失败状态提供了特殊的规定)很简单:

$ kill -TERM pid

将使该过程有机会保存打开的选项卡列表,但我不会指望表单内容或要保留的其他状态。


本地X客户端不太可能会丢失与X服务器的连接,尤其是由于按下某个键。杀死Firefox不会在私人浏览模式下保存有关Windows的信息。
吉尔斯(Gilles)'所以

我使用Lazarus,并且((当不使用“私人浏览”模式尝试切换我的主要gmail帐户时,使用标签页旁的网站信息打开gdocs以查看/编辑文档,而无需注销我的所有gmail帐户) -Grr,Google)的FF为“记住上次的窗口和标签页”,因此我只关心在“私人浏览”模式下打开的标签页。因此,虽然很高兴知道上述对的说法kill,但我怀疑FF是否会在这种情况下保存我的标签。FF是否可以重新连接到X?
user66001 2013年

“让FF重新附着到X的任何方式?” 因为我一直无法弄清楚在没有客户端进程获得信号的情况下如何取消映射/销毁窗口,所以我假设从FF程序到UI的套接字保持打开状态。只要一个进程连接到套接字,我就不会知道任何进程都可以利用它。(现在,您让我考虑了一下,我怀疑这是X服务器与客户端之间的协议错误,这非常难以调试(即,我永远不会尝试)进行调试)。
msw
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.