Confuso sobre o significado do formato de sinalizadores Unix vs. BSD para o comando "ps"

Confuso sobre o significado do formato de sinalizadores Unix vs. BSD para o comando "ps"

Eu li que o pscomando pode receber sinalizadores em dois formatos:

  • O formato Unix no qual você deve preceder os sinalizadores com um travessão.
  • O formato BSD no qual você não deve preceder os sinalizadores com um travessão.

Agora os mesmos sinalizadores podem ser usados ​​com ambos os formatos, por exemplo, os seguintes comandos significam as mesmas coisas:

ps -x
ps x

Ou o formato Unix possui seu próprio conjunto de sinalizadores, enquanto o formato BSD possui um conjunto de sinalizadores totalmente diferente?

Responder1

Opágina de manualresponde sua pergunta:

Opções de diferentes tipos podem ser misturadas livremente, mas podem surgir conflitos. Existem algumas opções sinônimas, que são funcionalmente idênticas, devido aos diversos padrões e psimplementações com as quais psé compatível.

Observe que ps -auxé distinto de ps aux. Os padrões POSIX e UNIX exigem a ps -auximpressão de todos os processos pertencentes a um usuário denominado "x", bem como a impressão de todos os processos que seriam selecionados pela -aopção. Se o usuário chamado "x" não existir, este ps poderá interpretar o comando como ps auxalternativa e imprimir um aviso. Esse comportamento tem como objetivo auxiliar na transição de scripts e hábitos antigos. É frágil, sujeito a alterações e, portanto, não deve ser confiável.

As bandeiras são diferentes, mas podem ser combinadas. Normalmente você escolheria um,por exemploou para ver detalhes de todos os processos, não uma mistura ps aux.ps -ef

A única xflag é a BSD, então ps xe ps -xproduz o mesmo resultado; mas isso não funciona para sinalizadores definidos em ambas as variantes.

Tudo isso é específico paraprocpseprocps-ng. A equivalência de ps xe ps -xé o resultado de um estágio de análise de “segunda chance” que é invocado se uma primeira passagem não analisa completamente todos os argumentos; isso não está documentado na página de manual, mas é mencionado emo HACKINGarquivo no código fonte:

A menos que a personalidade force a análise do BSD, parser.c tenta analisar a linha de comando como uma bagunça mista de BSD+SysV+Gnu. Em caso de falha, a análise do BSD é tentada. Se a análise do BSD falhardepoisFoi tentada a análise do SysV, a mensagem de erro vem da análise do SysV original.

informação relacionada