如何停止在Linux上运行的startx。 不只是改变inittab或init3

我正在使用rhel5 / rhel6,我想知道如何“停止startx”。 我有谷歌这个问题,大多数的解决scheme是改变inittab到5,或初始化3等

例如,在服务器启动后运行级别3,然后有人运行startx,服务器现在正在监听端口6000.更改inittab(需要重启,这不是一个选项,我仍然可以inputstartx后)和init 3实际上并没有解决问题,服务器仍在监听端口6000,而GUI仍在那里。

我可否知道是否有任何命令实际上“停止startx”,以便我可以运行startx -- -nolisten tcp

closures时要注意两点:

  • 您需要将X服务器本身完全closures,以便不会使graphics硬件处于未定义状态。
  • 您需要考虑在X服务器closures之前是否需要在X会话中干净地closures正在运行的任何内容。

X服务器和会话中的第一个进程都将由xinit启动。 一旦会话中的第一个进程死亡, xinit将负责closuresX服务器。 所以如果你发现这个进程并杀死它,X服务器也应该很快就会消失。

我将使用此命令来查找在X会话中运行的进程:

 ps -fA --forest | less 

你也可以通过发送一个SIGTERM信号直接杀死X服务器。 然后它会closures干净,所有剩余的客户将失去联系。

作为参考,这是xinit将在X会话中的第一个进程已经死亡时运行的代码:

 static void shutdown(void) { /* have kept display opened, so close it now */ if (clientpid > 0) { XSetIOErrorHandler(ignorexio); if (! setjmp(close_env)) { XCloseDisplay(xd); } /* HUP all local clients to allow them to clean up */ if (killpg(clientpid, SIGHUP) < 0 && errno != ESRCH) Error("can't send HUP to process group %d", clientpid); } if (serverpid < 0) return; if (killpg(serverpid, SIGTERM) < 0) { if (errno == ESRCH) return; Fatal("can't kill X server"); } if (!processTimeout(10, "X server to shut down")) return; Errorx("X server slow to shut down, sending KILL signal"); if (killpg(serverpid, SIGKILL) < 0) { if (errno == ESRCH) return; Error("can't SIGKILL X server"); } if (processTimeout(3, "server to die")) Fatalx("X server refuses to die"); }