내 ps
명령은 아래와 같이 Linux의 특정 버전을 제외하고 작동합니다.
[root@failinghost ~]# ps -xef | grep -v grep | grep websphere
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
[root@failinghost ~]# ps -version
ERROR: Unsupported SysV option.
********* simple selection ********* ********* selection by list *********
-A all processes -C by command name
-N negate selection -G by real group ID (supports names)
-a all w/ tty except session leaders -U by real user ID (supports names)
-d all except session leaders -g by session OR by effective group name
-e all processes -p by process ID
-q by process ID (unsorted & quick)
T all processes on this terminal -s processes in the sessions given
a all w/ tty, including other users -t by tty
g OBSOLETE -- DO NOT USE -u by effective user ID (supports names)
r only running processes U processes for specified users
x processes w/o controlling ttys t by tty
*********** output format ********** *********** long options ***********
-o,o user-defined -f full --Group --User --pid --cols --ppid
-j,j job control s signal --group --user --sid --rows --info
-O,O preloaded -o v virtual memory --cumulative --format --deselect
-l,l long u user-oriented --sort --tty --forest --version
-F extra full X registers --heading --no-heading --context
--quick-pid
********* misc options *********
-V,V show version L list format codes f ASCII art forest
-m,m,-L,-T,H threads S children in sum -y change -l format
-M,Z security data c true command name -c scheduling class
-w,w wide output n numeric WCHAN,UID -H process hierarchy
[root@failinghost ~]# ps -V
procps version 3.2.8
[root@failinghost ~]# uname -a
Linux failinghost 2.6.32-754.28.1.el6.x86_64 #1 SMP Fri Jan 31 06:05:42 EST 2020 x86_64 x86_64 x86_64 GNU/Linux
다음은 또 다른 Linux 호스트입니다. 다행히도 오류가 발생하지 않습니다.
[root@workinghost ~]$ ps -xef | grep -v grep | grep websphere
[root@workinghost ~]$ echo $?
1
[root@workinghost ~]$ uname -a
Linux workinghost 3.10.0-1062.1.2.el7.x86_64 #1 SMP Mon Sep 16 14:19:51 EDT 2019 x86_64 x86_64 x86_64 GNU/Linux
[root@workinghost ~]$ ps -V
procps-ng version 3.3.10
내 ps 명령이 Solaris가 아닌 모든 시스템에서 작동하기를 원합니다.
두 Linux 버전 모두에서 작동하는 솔루션을 제안할 수 있습니까?
답변1
아마도 필요하지 않을 것입니다. x
모든 -e
프로세스를 선택하는 것으로 충분합니다.
ps -ef
ps
이는 발생할 수 있는 모든 Linux 버전 에서 작동합니다 .
from 의 현재 버전은 ps
경고 없이 대시가 있거나 없는 옵션을 procps-ng
해석합니다 . CentOS 6 의 이전 버전에서는 경고가 추가되었습니다(그러나 여전히 모든 프로세스가 나열되므로 찾고 있는 프로세스가 존재하는 경우 찾아야 합니다). ).x
ps
procps
grep
행동두 버전에서는 다르지만 ps -xef
명령과 해당 환경이 출력됩니다. 이를 유지하려면 경고를 삭제할 수 있습니다.
ps -xef 2>/dev/null
이는 ps
from procps
및 의 이전 버전과 새 버전 모두에서 작동합니다 procps-ng
.
답변2
x
겉모습 때문에 불평할 수도 있어요맨페이지"BSD 옵션"이라고 부르므로 대시가 없어야 합니다(즉, x
대신 입니다 -x
). 어쨌든 이것은 -x
존재하지 않는 것 같으니 어떻게 설명할지 누가 알겠습니까? 아마도 의 동의어로 -x
, 예를 들어 다음과 같은 경우인 것 같습니다.현재 FreeBSD ps.
또한 콤보가 무엇을 하는지, 무엇을 해야 하는지 잘 모르겠습니다. 내 시스템(Debian, ps from procps-ng 3.3.12
)에서는 프로세스를 트리 형식으로 나열하지만 거기에는 다음을 나타내는 옵션이 없는 것 같습니다.
PID TTY STAT TIME COMMAND
12277 ? S 119:08 mosh-server new ...
12278 pts/20 Ss 0:00 \_ -bash ...
12286 pts/20 S+ 0:01 \_ screen -xU
한 줄만 grep하려면 트리 출력이 필요하지 않을 것입니다.
답변3
3.2.8은 최소 9년이 지났으며 현재 버전보다 많은 버전이 뒤떨어져 있습니다.
문제는 하나의 모드로 설정했는데 x가 다른 모드이고 원하는 모드가 무엇인지 혼란스러워진다는 것입니다. 내 생각에 우리는 2012년에 출시된 3.3.4에서 이 문제를 수정했다고 생각합니다(신경 쓰지 않게 만들어 엄밀히 말하면 정확하지는 않지만 사용자 기대에 더 부합하도록 만들었습니다).
ps xef는 절대적으로 정확하며 이것이 당신에게 유용할 것이라고 믿습니다.