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

5

Eu li que o comando ps pode receber sinalizadores em dois formatos:

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

Agora, os mesmos flags podem ser usados em ambos os formatos, por exemplo, os seguintes comandos significam as mesmas coisas:

ps -x
ps x

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

    
por user227188 16.04.2017 / 17:23

1 resposta

10

A página de manual responde à sua pergunta:

Options of different types may be freely mixed, but conflicts can appear. There are some synonymous options, which are functionally identical, due to the many standards and ps implementations that this ps is compatible with.

Note that ps -aux is distinct from ps aux. The POSIX and UNIX standards require that ps -aux print all processes owned by a user named "x", as well as printing all processes that would be selected by the -a option. If the user named "x" does not exist, this ps may interpret the command as ps aux instead and print a warning. This behavior is intended to aid in transitioning old scripts and habits. It is fragile, subject to change, and thus should not be relied upon.

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

O único x flag é o BSD, então ps x e ps -x produzem o mesmo resultado; mas isso não funciona para sinalizadores definidos em ambas as variantes.

Tudo isso é específico para procps e procps-ng . A equivalência de ps x e ps -x é o resultado de um estágio de análise de "segunda chance" que é chamado se uma primeira passagem não analisar completamente todos os argumentos; isso não está documentado na manpage, mas é mencionado em o arquivo HACKING no código-fonte :

Unless the personality forces BSD parsing, parser.c tries to parse the command line as a mixed BSD+SysV+Gnu mess. On failure, BSD parsing is attempted. If BSD parsing fails after SysV parsing has been attempted, the error message comes from the original SysV parse.

    
por 16.04.2017 / 17:39

Tags