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 / 743737
Accepted
Abced Decba
Abced Decba
Asked: 2023-04-23 14:55:02 +0800 CST2023-04-23 14:55:02 +0800 CST 2023-04-23 14:55:02 +0800 CST

Processos filho e irmão da execução do tmux no zsh

  • 772

Estou usando Ubuntu 22.04.1on WSL 2(embora o fato de ser Unixrelevante apenas para esta pergunta)

Como é que, quando executamos tmuxuma zshsessão, a árvore de processos (que eu resumi um pouco) muda de

init(Ubuntu)─┬─SessionLeader───Relay(9)─┬─ssh-agent
                                        └─zsh───pstree

para

init(Ubuntu)─┬─SessionLeader───Relay(9)─┬─ssh-agent
                                        ├─tmux: server───zsh───pstree
                                        └─zsh───tmux: client

Aqui, pstreeé apenas o comando que me informa a árvore do processo, daí sua presença acima.

Quando rodamos tmuxem zsh, o que acontece é que zshroda fork()para criar um processo fork que é filho de zsh(ou seja, tmux: clientacima). Não tenho certeza de como tmux: server, um processo que é irmão do processo que o gerou, surge.

process
  • 1 1 respostas
  • 15 Views

1 respostas

  • Voted
  1. Best Answer
    Stéphane Chazelas
    2023-04-23T15:59:54+08:002023-04-23T15:59:54+08:00

    Para o servidor, tmuxbifurca-se duas vezes para se daemonizar, desconectar-se da sessão da qual foi iniciado.

    A criança morre, o neto comanda o servidor. Isso significa que o servidor não tem pai.

    Processos sem pais são normalmente adotados por init, o processo de id 1. No Linux, algum processo pode ser nomeado subceifeiro filho usando o PR_SET_CHILD_SUBREAPER prctl()para assumir esse papel para seus descendentes.

    Isso ou o equivalente para WSL é provavelmente o que você está observando aqui. Esse Relay(9)processo é provavelmente um subceifeiro filho e adotou esse tmuxdaemon de servidor.

    Você pode dizer quem é a criança subceifadora em sua ancestralidade com algo como:

    ((zmodload zsh/system; sleep 0.2; echo $sysparams[ppid])&) | cat
    

    Eu esperaria que retornasse o pid do Relay(9)processo.

    Você pode seguir o que tmuxfaz aqui executando-o em:

    strace -fo log -e clone,exit_group,prctl tmux
    

    E inspecione o conteúdo do logarquivo depois. Você verá algo como:

    3908  execve("/usr/bin/tmux", ["tmux"], 0x7fffd0c3e990 /* 50 vars */) = 0
    3908  prctl(PR_SET_NAME, "tmux: client") = 0
    

    O pai é o cliente.

    3908  clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f54afe20a10) = 3909
    3909  clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f54afe20a10) = 3910
    

    Forked duas vezes para o servidor.

    3909  exit_group(0)                     = ?
    

    Criança termina.

    3910  prctl(PR_SET_NAME, "tmux: server") = 0
    

    O neto (que nessa época já perdeu seu pai acima e foi adotado pelo subceifador filho ) executa o servidor.

    [...]
    3910  clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f54afe20a10) = 3911
    3911  execve("/bin/zsh", ["-zsh"], 0x55bee5bdd170 /* 54 vars */) = 0
    

    O servidor bifurca um processo para executar o seu $SHELLno primeiro painel.

    • 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