私の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
fromprocps
と以前のバージョンと新しいバージョンの両方で機能します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
1行だけgrepするには、ツリー出力は必要ありません。
答え3
3.2.8は少なくとも9年が経過し、現在のバージョンよりも多くのバージョンが劣っています。
問題は、1つのモードに設定しましたが、xが別のモードで、目的のモードが何であるかが混乱していることです。私の考えでは、2012年にリリースされた3.3.4でこの問題を修正したと思います(気にしないようにして厳密に言えば、正確ではありませんが、ユーザーの期待に合うようにしました)。
ps xefは絶対に正確で、これがあなたに役立つと信じています。