どのスクリプトbashが実行されているのか、どうすればわかりますか?

どのスクリプトbashが実行されているのか、どうすればわかりますか?

プロセスが実行されているスクリプトをどのように確認しますか?私が使用するとき:

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シェルの環境を分析することが完全なソリューションを得る方法のようです。

追加資料:

関連情報