jobs
各ジョブが呼び出されたときの出力にジョブディレクトリ(必ずしも各ジョブの現在のジョブディレクトリである必要はありません)が含まれていることは正しいですか?
$ jobs -l | grep JDBC
[15] 20422 Running PDFXCview all.pdf & (wd: ~/mydata/dirlinks/cs/SQL/API/JDBC/general/official/tutorials)
[20] 20542 Running PDFXCview all.pdf & (wd: ~/mydata/dirlinks/cs/SQL/API/JDBC/general/wikipedia)
同様に、ps
各プロセスが呼び出されたときに各プロセスの以前の作業ディレクトリをインポートすることは可能ですか?
呼び出しpgrep
時に各プロセスの前の作業ディレクトリのパス名(文字列)を取得できますかpgrep ... <pattern_in_working_dir_pathname>
?
プロセス呼び出し時に、作業ディレクトリにあるキーワードでプロセスを検索したいと思います。
ありがとうございます。
ベストアンサー1
jobs
コマンド可能プログラムの作業ディレクトリの表示ここに行く、そのディレクトリがシェルの現在のディレクトリと異なる場合。これは、シェルが現在の状態ではないことを知っていること(プロセスが開始された場所)を追跡するためです。
また、シェルに依存します。
例えばbash
bash-4.4$ cd /tmp
bash-4.4$ sleep 1000 &
[1] 24807
bash-4.4$ jobs -l
[1]+ 24807 Running sleep 1000 &
bash-4.4$ cd /
bash-4.4$ jobs -l
[1]+ 24807 Running sleep 1000 & (wd: /tmp)
しかし、ksh93
これをしないでください。
$ sleep 1000 &
[1] 7164
$ jobs -l
[1] + 7164 Running sleep 1000 &
$ cd /
$ jobs -l
[1] + 7164 Running sleep 1000 &
$
私はプロセスのcwdを見つける移植可能な方法がないと思います。 fstat
、pwdx
同様のものが役に立ちます。root
自分に属していないプロセスを表示するには権限が必要な場合があります。
Linuxでは、シンボリックリンクを確認して特定のパスに一致するプロセスを使用できます/proc/.../cwd
。
/tmp
たとえば、パス内のプロセスを見つけるには、次のようにします。
% sudo ls -l /proc/*/cwd | grep /tmp
lrwxrwxrwx. 1 sweh sweh 0 Jul 28 09:38 /proc/23435/cwd -> /news/tmp
lrwxrwxrwx. 1 sweh sweh 0 Jul 28 09:39 /proc/7124/cwd -> /news/tmp
これは、シンボリックリンクがプロセスのディレクトリ内部表現と一致しない可能性があることに注意してください。
$ cd /usr/tmp
$ pwd
/usr/tmp
$ ls -l /proc/self/cwd
lrwxrwxrwx. 1 sweh sweh 0 Jul 28 09:41 /proc/self/cwd -> /var/tmp/
$ ls -l /usr/tmp
lrwxrwxrwx 1 root root 10 May 13 09:39 /usr/tmp -> ../var/tmp/
$
シェルは私が中にいると思います/usr/tmp
が、実際には中にあります/var/tmp
。
以下を追加するように編集されました。
「どのプロセスがマウントポイントを使用しているか」に関する質問がある可能性があるこの問題の特別な場合があります。cwd
開いている可能性のあるファイルは報告されません。
たとえば、次のようになります。
$ sudo fuser -u -c /brick
/brick: 3552(root)
$ ps -p 3552
PID TTY TIME CMD
3552 ? 00:04:51 glusterfsd
$
私たちは、プロセスがファイルシステムをglusterfsd
使用する唯一のプロセスであることを知っています。/brick