プロセスが実行されているスクリプトをどのように確認しますか?私が使用するとき:
ps -u user
次の結果が表示されます。
10005194 26932 0.0 0.0 112700 1544 ? Ss Jun03 0:00 -bash
10005194 27117 0.0 0.0 112700 1528 ? Ss Apr24 0:00 -bash
10005194 27164 0.0 0.0 112700 2040 ? Ss Jun06 0:00 -bash
10005194 27404 0.0 0.0 112700 1544 ? Ss May27 0:00 -bash
10005194 27484 0.0 0.0 112700 1528 ? Ss Apr23 0:00 -bash
10005194 27531 0.0 0.0 112700 1528 ? Ss May22 0:00 -bash
...
何百行もあります。私はこのユーザーが多くのスクリプトを実行していることを知っていますが、スレッドを占めるスクリプトの範囲を絞り込みたいと思います。これを行う方法はありますか?
答え1
w
(「広い」という意味)オプションを使用してください。
man ps
(検索)からwide
:
w
広い出力。無限の幅を得るには、このオプションを2回使用します。
例えばps ww -u cas
:
$ ps ww -U cas | grep bash
1350 pts/0 Ss 0:00 -bash
18345 pts/34 S 0:00 /bin/bash /home/cas/bin/myscript.sh
21293 pts/34 Ss+ 0:00 bash
これは-bash
ログインシェルです。
plainbash
はログインではなく対話型シェルです。 ttypts/34
は同じで、bashシェルの親シェル(または遠い祖父母)であることがわかりますmyscript.sh
。
/usr/env/bin bashを使用すると、どのスクリプトが実行されているかを判断できません。代わりに、bash実行可能ファイルが実行されているコンピュータに適しているかどうかを正確に指定する必要があります。
答え2
@casが提案したように、ps
いくつかの情報を表示できます。表示するオプションを追加コマンドライン、これは正しい方向に進むステップです。このスクリプトが与えられたら:
#!/usr/bin/env bash
while true
do
date
sleep 10
done
ps -ww
次のプロセスラインを表示することをお勧めします。
9417 pts/5 00:00:00 bash
9496 pts/5 00:00:00 sleep
ただし、ps -fwwl -u $USER
これは次のように表示されます。
0 S tom 9417 9416 0 80 0 - 29405 - 18:08 pts/5 00:00:00 bash ./foo
0 S tom 9419 9417 0 80 0 - 28111 - 18:08 pts/5 00:00:00 sleep 10
私がそれを実行したからです./foo
。もちろん、私のパスで「foo」を実行すると、「./」は発生しません。どちらの場合も、実行される実際のスクリプトは値$PATH
と現在の作業ディレクトリ(スクリプトの起動時に)によって異なります。 procfs を含む一部のシステム (Linux など) では、次の情報を入手できます。
これらすべてを考慮すると、フルパスps
名の有無にかかわらず、スクリプトの出力を解析するスクリプトを書くのに十分な情報(少なくともLinuxの場合)があります。
奇妙なことに、ほとんどのシェルは開かれたスクリプトファイル記述子があるかのように動作するため、この情報を提供すると予想しましたlsof
(ただし、クイックスキャンではこれを見ることはできません)。したがって、ps
シェルの環境を分析することが完全なソリューションを得る方法のようです。
追加資料: