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 / user-63459

Alexis King's questions

Martin Hope
Alexis King
Asked: 2019-10-06 04:34:17 +0800 CST

O pai de um processo tem algum significado da perspectiva de seu filho?

  • 8

No POSIX, os processos são “relacionados” entre si por meio de duas hierarquias básicas:

  1. A hierarquia dos processos pai e filho.

  2. A hierarquia de sessões e grupos de processos.

Os processos do usuário têm muito controle sobre o último, via setpgide setsid, mas eles têm muito pouco controle sobre o primeiro—o ID do processo pai é definido quando um processo é gerado e alterado pelo kernel quando o pai sai (geralmente para PID 1 ), mas caso contrário não muda. Refletindo sobre isso, tenho me perguntado quão importante é o relacionamento entre pais e filhos.

Aqui está um resumo do meu entendimento até agora:

  • Os relacionamentos pai-filho são claramente importantes do ponto de vista do processo pai , pois várias syscalls, como waite setpgid, são permitidas apenas em processos filho.

  • A relação sessão-grupo-processo é claramente importante para todos os processos, tanto para o líder da sessão quanto para outros processos na sessão, uma vez que syscalls killoperam em grupos de processos inteiros, setpgidsó podem ser usados ​​para ingressar em um grupo na mesma sessão e todos os processos no grupo de processos em primeiro plano de uma sessão são enviados SIGHUPse o líder da sessão sair.

  • Além disso, as duas hierarquias estão claramente relacionadas do ponto de vista do pai, uma vez que setsidafeta apenas novos filhos e setpgidsó podem ser usadas em crianças, mas parecem essencialmente não relacionadas do ponto de vista da criança (uma vez que o processo de morte do pai não tem impacto algum no grupo ou sessão de um processo).

No entanto, visivelmente ausente está qualquer razão para um processo filho se importar com o que seu pai atual é. Portanto, tenho a seguinte pergunta: o valor atual de getppid()tem alguma importância do ponto de vista do processo filho , além de talvez identificar se seu processo de desova saiu ou não?


Para colocar a mesma questão de outra forma, imagine que o mesmo programa é gerado duas vezes, do mesmo pai, de duas maneiras diferentes:

  1. O primeiro filho é gerado da maneira usual, fork()seguido por exec().

  2. O segundo filho é gerado indiretamente: o processo pai chama fork(), e o filho também chama fork(), e é o processo neto que chama exec(). O filho imediato sai, então o neto fica órfão e seu PPID é reatribuído ao PID 1.

Nesse cenário hipotético, supondo que tudo o mais seja igual, algum programa razoável tem algum motivo para se comportar de maneira diferente? Até agora, minha conclusão parece ser “não”, já que a sessão permanece inalterada, assim como os descritores de arquivos herdados do processo… mas não tenho certeza.

Nota: Eu não considero “adquirir o PID pai para se comunicar com ele” como uma resposta válida para essa pergunta, uma vez que programas órfãos geralmente não podem confiar que seu PPID seja definido como 1 (alguns sistemas definem o PPID de processos órfãos para alguns outro valor), portanto, a única maneira de evitar uma condição de corrida é adquirir o ID do processo pai por meio de uma chamada para getpid() antes da bifurcação e, em seguida, usar esse valor no filho.

process
  • 3 respostas
  • 1387 Views
Martin Hope
Alexis King
Asked: 2018-05-23 13:24:34 +0800 CST

Expandir glob com sinalizador inserido antes de cada nome de arquivo

  • 16

Eu tenho um programa que espera argumentos na seguinte sintaxe:

prog [-f filename | -g filename1 filename2] ...

Cada nome de arquivo deve ser prefixado com o -fsinalizador. Por exemplo, as invocações a seguir são válidas de prog:

prog -f a.txt -g b.txt c.txt -f d.txt
prog -g a.txt b.txt -g c.txt d.txt
prog -f a.txt -f b.txt -f c.txt

…mas os seguintes não são:

prog -f a.txt b.txt
prog -f a.txt -g b.txt
prog a.txt

No meu caso, eu só me importo com a -fopção.

Eu tenho muitos arquivos em um diretório, todos terminando em .txt. Eles se parecem com isso:

important-files/
├── a.txt
├── b.txt
├── c.txt
├── d.txt
└── filename with spaces.txt

Eu gostaria de evitar a necessidade de listar todos os arquivos, um por um. Normalmente, eu usaria um glob direto para isso:

$ prog important-files/*.txt

Mas isso não funciona, pois produz a seguinte invocação inválida:

$ prog important-files/a.txt important-files/b.txt important-files/c.txt important-files/d.txt 'important-files/filename with spaces.txt'

…quando eu realmente quero esta invocação:

$ prog -f important-files/a.txt -f important-files/b.txt -f important-files/c.txt -f important-files/d.txt -f 'important-files/filename with spaces.txt'

…uma vez que cada nome de arquivo deve ser prefixado com -fpara progentender, eles não devem ser interpretados como -g.

Qual é a maneira mais curta de usar um glob e prefixar cada um dos arquivos para os quais ele se expande com um sinalizador?

bash wildcards
  • 6 respostas
  • 1312 Views

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