我正在使用rhel5 / rhel6,我想知道如何“停止startx”。 我有谷歌这个问题,大多数的解决scheme是改变inittab到5,或初始化3等
例如,在服务器启动后运行级别3,然后有人运行startx,服务器现在正在监听端口6000.更改inittab(需要重启,这不是一个选项,我仍然可以inputstartx后)和init 3实际上并没有解决问题,服务器仍在监听端口6000,而GUI仍在那里。
我可否知道是否有任何命令实际上“停止startx”,以便我可以运行startx -- -nolisten tcp
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"); }