como parar um startx em execução no linux. Não apenas mudando o inittab ou o init3

1

Estou usando o rhel5 / rhel6 e gostaria de saber como "parar o startx". Eu tenho google este problema e a maioria das soluções são mudar inittab para 5, ou init 3 etc.

Por exemplo, após a inicialização do servidor como nível de execução 3, alguém executa o startx e o servidor está agora escutando na porta 6000. alterando o inittab (requer reinicialização, que não é uma opção, e eu ainda consigo digitar startx depois disso) e init 3 não resolve o problema, o servidor ainda está escutando na porta 6000, e a GUI ainda está lá.

Posso saber se existe algum comando para realmente "parar o startx", para que eu possa executar startx -- -nolisten tcp

    
por Akalitzc Kayle 25.11.2015 / 08:14

1 resposta

1

Há duas coisas a serem lembradas ao encerrá-lo:

  • Você precisa que o próprio servidor X seja encerrado de maneira limpa, de modo que você não deixe o hardware gráfico em um estado indefinido.
  • É preciso considerar se alguma coisa em execução na sessão X precisar ser encerrada antes que o servidor X seja encerrado.

O servidor X e o primeiro processo da sessão serão iniciados por xinit . Quando o primeiro processo da sessão for interrompido, xinit resolverá encerrar o servidor X. Então, se você encontrar esse processo e matá-lo, o servidor X deve ser removido logo após.

Eu usaria este comando para encontrar os processos em execução na sessão X:

ps -fA --forest | less

Você também pode simplesmente matar o servidor X diretamente enviando um sinal SIGTERM para ele. Ele será encerrado de forma limpa e todos os clientes restantes perderão a conexão.

Para referência, este é o código que xinit será executado quando o primeiro processo na sessão X tiver falecido:

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");
}
    
por 25.11.2015 / 08:54

Tags