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-273579

aviro's questions

Martin Hope
aviro
Asked: 2024-01-10 18:43:55 +0800 CST

O comportamento de bash -c "<comando único>" está documentado?

  • 19

É bem sabido que ao executar bash -c "COMMAND"(pelo menos nas versões comuns do Linux) quando há um único comando sem nenhum metacaractere (exceto space , tab ou newline ), o bash -cprocesso não irá bifurcar, mas sim substituir-se executando COMMANDdiretamente com execvea chamada do sistema para otimização, então o resultado será apenas um processo.

$ pid=$$; bash -c "pstree -p $pid"
bash(5285)───pstree(14314)

Se houver algum metacaractere (como redirecionamento) ou mais de um comando (que requer um metacaractere de qualquer maneira), bashserá bifurcado para cada comando executado.

$ pid=$$; bash -c ":; pstree -p $pid"
bash(5285)───bash(28769)───pstree(28770)

$ pid=$$; bash -c "pstree -p $pid 2>/dev/null"
bash(5285)───bash(14403)───pstree(14404)

Este é um recurso de otimização não documentado (o que significa que não é garantido) ou está documentado em algum lugar e garantido?


Nota: Presumo que nem todas as versões bashse comportem assim e que em algumas versões que o fazem, é apenas considerado um detalhe de implementação e não garantido, mas gostaria de saber se talvez existam pelo menos algumas bashversões que suportem explicitamente isso e documentem a condição por esta. Por exemplo, se houver um único ;caractere após o comando, sem nenhum segundo comando, bashainda execvenão haverá bifurcação.

$ pid=$$; bash -c "pstree -p $pid ; "
bash(17516)───pstree(17658)

Antecedentes da minha pergunta

Como mencionei, esse comportamento é bastante conhecido 1 2 por bashusuários experientes e estou familiarizado com ele há muito tempo.

Alguns dias atrás, encontrei o seguinte comentário no shell bash interativo: Defina o diretório de trabalho por meio de opções de linha de comando onde @dave_thompson_085 escreveu:

bashexecuta automaticamente (ou seja, substitui-se por) o último (ou único) comando em -c.

Eu respondi que isso só é verdade se houver um único comando. Mas então me perguntei: existem algumas versões em bashque talvez o último comando seja exec ed e não bifurcado, mesmo que haja outro comando antes dele? E em geral, há casos em que esse comportamento é garantido? Certas bashversões expõem (e elaboram) esse recurso fora do código-fonte?

Referências adicionais

  • 1 Por que não há clone ou fork aparente no comando bash simples e como isso é feito?
  • 2 Por que o bash não gera um subshell para comandos simples?
bash
  • 1 respostas
  • 1112 Views
Martin Hope
aviro
Asked: 2023-09-11 20:47:19 +0800 CST

Por que o Linux precisa de pid_max e threads-max?

  • 6

Eu entendo a diferença entre /proc/sys/kernel/pid_maxe /proc/sys/kernel/threads-max. Há uma boa explicação na resposta para Entendendo as diferenças entre pid_max, ulimit -u e thread_max :

/proc/sys/kernel/pid_maxnão tem nada a ver com o número máximo de processos que podem ser executados a qualquer momento. É, na verdade, o IDENTIFICADOR numérico máximo de PROCESSO que pode ser atribuído pelo kernel.

No kernel Linux, um processo e um thread são a mesma coisa. Eles são tratados da mesma maneira pelo kernel. Ambos ocupam um slot na estrutura de dados task_struct. Um thread, pela terminologia comum, é no Linux um processo que compartilha recursos com outro processo (eles também compartilharão um ID de grupo de threads). Um thread no kernel do Linux é em grande parte uma construção conceitual no que diz respeito ao escalonador.

Agora que você entende que o kernel não diferencia amplamente entre um thread e um processo, deve fazer mais sentido que /proc/sys/kernel/threads-maxseja na verdade o número máximo de elementos contidos na estrutura de dados task_struct. Qual é a estrutura de dados que contém a lista de processos, ou como podem ser chamados, tarefas.

No entanto, efetivamente, ambos limitam o número máximo de threads simultâneos em um host. Este número será - no meu entender - o mínimo de pid_maxe threads-max. Então, por que ambos são necessários?

Entendo que o valor padrão pid_maxé baseado no número de CPUs possíveis da máquina, enquanto o padrão threads-maxé derivado do número de páginas . Mas como ambos têm o mesmo efeito, o Linux não poderia ter apenas um valor que fosse o mínimo de ambos?

linux-kernel
  • 1 respostas
  • 30 Views
Martin Hope
aviro
Asked: 2022-03-25 06:24:48 +0800 CST

O Linux mantém a memória no mesmo local físico?

  • 1

Supondo que o kernel do Linux não troque as páginas de memória do meu processo, posso assumir que sua localização física na RAM não será alterada ou é possível que o kernel as mova?

A razão pela qual estou perguntando é que estou pensando em escrever memtesterdo zero e queria saber se é possível que uma página recém-alocada esteja no mesmo local físico na RAM que o processo já testou antes.

linux kernel
  • 1 respostas
  • 76 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