Como posso obter uma lista completa de processos no solaris, sem linhas truncadas?

57

Existe uma maneira de gerar uma lista de processos completa no solaris, sem linhas truncadas? Eu tentei o pscomando, com os seguintes argumentos:

  -f Gera uma lista completa. (Veja abaixo para
                      importância das colunas em uma lista completa
                      ing.)
  -l Gera uma lista longa. (Ver abaixo.)

Portanto, esses dois parecem fazer o que eu quero, no entanto, mais abaixo na página do manual do ps, acho o seguinte:

 
 args O comando com todos os seus argumentos como um
                         corda. A implementação pode truncar
                         esse valor para a largura do campo; isto é
                         dependente da implementação, se houver
                         truncamento adicional ocorre. Isto é
                         não especificado se a sequência
                         representado é uma versão do argumento
                         lista como foi passada para o comando
                         quando foi iniciado ou é uma versão do
                         argumentos, pois eles podem ter sido modificados
                         pelo aplicativo. Os aplicativos não podem
                         dependem de poder modificar seus
                         lista de argumentos e tendo essa modificação
                         refletida na saída de ps.
                         A implementação Solaris limita o
                         string para 80 bytes; a corda é a
                         versão da lista de argumentos como era
                         passado para o comando quando iniciado.

O que basicamente diz que a saída será truncada e não há nada que eu possa fazer sobre isso. Então, eu estou voltando aqui. Certamente outras pessoas já se depararam com esse problema e talvez até tenham uma maneira de contorná-lo. Suponho que o ps não possa fazer isso e, portanto, preciso usar outras ferramentas para fazer isso. Isso é preciso?

Gabe.
fonte
Você está falando sobre o pscomando? Nesse caso, atualize a pergunta para que fique mais clara.
phunehehe
Sim, desculpe ... meu conserto inicial foi com o comando ps, deixei a pergunta mais clara.
Gabe.

Respostas:

63

você poderia tentar

pargs <PID>

isso fornece uma lista de todos os argumentos

ou então use outro ps. Se executado como root (ou qualquer usuário com privilégios suficientes para esse assunto)

/usr/ucb/ps auxww

lhe dará todos os argumentos. Sua parte do SUNWscpu, "Compatibilidade de Origem, (Usr)"

Marcel G
fonte
pargsmostra a cópia em andamento dos argumentos da linha de comandos (e, opcionalmente, o ambiente). É bom saber, obrigado!
Gilles 'SO- stop be evil' (
1
todo este diretório / usr / ucb é novo para mim ... eu gosto!
Gabe.
3
No Solaris 11, se você usar opções sem traço (como "/ usr / bin / ps auxwww"), elas serão tratadas como opções de estilo UCB e a saída mostrará linhas muito longas, mesmo quando você NÃO estiver executando como root. Isso não é bem divulgado. Veja também: superuser.com/questions/148271/ps-command-in-solaris
Chris Quenelle
14

O kernel não é necessário para acompanhar os argumentos da linha de comando. Quando um programa é iniciado por meio da execvechamada, o kernel deve copiar os argumentos na memória do processo (para que estejam disponíveis como argvem um programa C, por exemplo). Depois disso, o kernel pode descartar a memória usada para armazenar os argumentos iniciais da linha de comando. O processo pode substituir sua cópia dos argumentos. Portanto, pode simplesmente não haver vestígios dos argumentos.

Algumas variantes do unix mantêm uma cópia dos argumentos de alguma forma. O Solaris expõe alguns dados no /proc/$pid. A partir do OpenSolaris 2009.06, o único rastreio dos argumentos está em /proc/$pid/psinfo, onde eles são concatenados com espaços no meio (para que você não possa distinguir entre foo "one" "two"e foo "one two") e a sequência resultante é truncada para 80 bytes. Esse campo /proc/$pid/psinfoé o que é psimpresso na argscoluna.

A propósito, as opções -fe -lcontrolam quais campos são impressos, não se os campos estão truncados com alguma largura.

Gilles 'SO- parar de ser mau'
fonte
Esta foi uma boa resposta também, muito informativa. O comando pargs atendeu melhor à minha necessidade, e é a única razão pela qual eu selecionei essa resposta.
Gabe.
6
Então, mais uma vez, nos sentamos aqui no ano de 2013 e ainda truncamos as strings para 80 bytes, porque só tínhamos terminais de 80 caracteres na década de 1970 e "alguns" programas ainda precisam entender o fato de que a vida mudou. E gostamos, elogiamos isso como "compatibilidade"! Nós deveria ter vergonha de nós mesmos ...
Manjabes
1
@Manjabes haha! As pessoas que optam por continuar usando o Solaris não devem reclamar que o sistema faça as coisas da maneira antiga ;-) O Solaris é intencionalmente lento para mudar, para ser mais compatível com os programas mais antigos que esperam determinado comportamento. Se você quiser um sistema operacional com uma lista ps mais longa e recursos mais sofisticados nos programas utilitários, poderá usar o Linux.
JohnGH
2

ps -efornece a lista de todos os processos em execução. Também tem isso ps -elf.

ari
fonte
2
Mesmo usando argumento -l ainda trunca a informação de linha de comando
Lars Nordin
1
Não é uma resposta para a pergunta.
319 Konrad Gajewski
0

Dependendo de qual pscomando você usa, eu uso

ps -auxw
Wes
fonte
1
A versão do ps no Solaris que usa argumentos auxw não requer um '-' principal. Se você não estiver no Solaris, sua resposta não será relevante.
JohnGH
0

prstat fornecerá os processos atualmente em execução, juntamente com seus pids e a utilização da CPU.

user41052
fonte