AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 681603
Accepted
user366312
user366312
Asked: 2021-12-16 07:37:19 +0800 CST2021-12-16 07:37:19 +0800 CST 2021-12-16 07:37:19 +0800 CST

Como posso matar um processo específico em execução dentro de uma sessão de tela, sem matar essa sessão de tela?

  • 772

Executei vários processos de treinamento de ANN em várias screensessões. Quando entro em uma tela, vejo um processo de treinamento em execução.

Agora, quero matar um processo específico dentro da tela sem matar a tela.

Eu posso pressionar CTRL + C. Mas, isso produz algum texto de lixo indesejado na tela.

Como posso fazer isso de forma limpa?

Se eu tentar matar o processo usando o ID do processo, fico confuso. Para mim, é impossível reconhecer processos individuais. Coz, eles estão executando arquivos com os mesmos nomes de arquivo.

Como fazer isso?

NB estou usando TensorFlow e Keras.

NB # 2, estou usando SSH.

gnu-screen process
  • 2 2 respostas
  • 797 Views

2 respostas

  • Voted
  1. Best Answer
    UrsineRaven
    2022-01-22T09:59:23+08:002022-01-22T09:59:23+08:00

    Se você conseguir fazer ssh no host remoto (a única tela em execução), poderá modificar meu script de uma pergunta semelhante que eu tive que fornecer o pid do processo e depois matá-lo.

    1. Encontre o número da janela na qual você deseja encerrar o processo. Se você estiver visualizando a janela, Ctrl+a Nfará com que ela apareça por alguns segundos no canto inferior esquerdo da janela.
      Nota: Isso é segure Ctrl, pressione a, solte Ctrl, então N maiúsculo
    2. Se você tiver várias sessões de tela em execução, descubra qual sessão você está segmentando. Não entrarei em detalhes aqui, porque estou assumindo que você está executando apenas uma sessão. Você pode verificar executando isso no host remoto:screen -ls
    3. Execute o script modificado abaixo, passando o número da janela que você encontrou na etapa 1.
      Nota: você deve salvar o script em um arquivo e torná-lo executável [ chmod +x <script-name>] antes de executá-lo [ ./<script-name> <window-number>])
    4. Verifique novamente se o que retornou se parece com o que estava sendo executado nessa janela
    5. No host remoto, execute kill <pid-from-first-column-that-script-returned>(substituindo os colchetes pelo pid real retornado pelo script)
    6. Você Terminou!

    O roteiro modificado:

    #!/bin/bash
    # Accept a GNU/screen window number and return the process running in its shell. 
    # It assumes that you only have 1 session. If you have multiple sessions,
    # pass in session name as the second argument.
    TargetTabNum=$1
    SessionName=$2
    
    if [ -z "$SessionName" ]; then
        SessionName=.*
    fi
    
    # This finds the session PID given the session name.
    # The screen command prints the list of session IDs
    # Example output of screen command:
    #     There is a screen on:
    #             29676.byobu     (12/09/2019 10:23:19 AM)        (Attached)
    #     1 Socket in /run/screen/S-{username here}.
    # Example output after sed command: 29676
    SessionPID=$(screen -ls | sed -n "s/\s*\([0-9]*\)\.$SessionName\t.*/\1/p")
    
    # This gets all the processes that have the session as a parent,
    # loops through them checking the WINDOW environment variable for
    # each until it finds the one that matches the window number, and
    # then finds the process with that process as a parent and prints its
    # pid, command, and arguments (or null if there are no matching processes)
    ProcessArray=( $(ps -o pid --ppid $SessionPID --no-headers) )
    for i in "${ProcessArray[@]}"
    do
        ProcTabNum=$(tr '\0' '\n' < /proc/$i/environ | grep ^WINDOW= | cut -d '=' -f2)
        if [ ! -z "$ProcTabNum" ] && [ "$TargetTabNum" -eq "$ProcTabNum" ]; then
            ProcInTab=$(ps -o pid,args --ppid $i --no-headers)
            if [[ $? -eq 1 ]]; then
                ProcInTab=NULL
            fi
            echo $ProcInTab
            exit 0
        fi
    done
    echo "Couldn't find the specified Tab: $TargetTabNum" >&2
    exit 1
    
    
    • 3
  2. aviro
    2021-12-16T09:06:55+08:002021-12-16T09:06:55+08:00

    Cada tela tem um pid que você pode obter do nome da tela ( pid.tty.hostou pid.sessionname). Se todos os processos são locais (ou seja, se você não se conectou da sessão de tela ao host remoto via ssh, por exemplo), é fácil ver os filhos da tela usando:

    pstree -p <pid>
    

    Então você pode encontrar o pid do processo e matá-lo.

    • 0

relate perguntas

  • Como substituir os IDs de usuário e IDs de grupo por nomes em vez de números em "ps"?

  • Como obter os IDs dos grupos suplementares de um processo?

  • O que `/proc/irq/.../spurious` contém?

  • Um processo pai pode alterar o ambiente de seu filho?

  • Como 'ejetar' obtém processos para fechar identificadores de arquivo?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve