[解決済み] Linux/Unix でプロセスが実行されているかどうかを判断するコマンドは?
質問
特定のプロセスが実行されているかどうかを判断する、プラットフォームに依存しない (Linux/Unix|OSX) シェル/bash コマンドが必要です。
mysqld
,
httpd
...
これを行うための最も簡単な方法/コマンドは何ですか?
どのように解決するのですか?
一方
pidof
と
pgrep
は、何が実行されているかを判断するための素晴らしいツールですが、残念ながら、どちらも一部のオペレーティングシステムでは使用できません。確実なフェイルセーフは、以下を使用することでしょう。
ps cax | grep command
Gentoo Linuxでの出力です。
14484 ? S 0:00 apache2 14667 ? S 0:00 apache2 19620 ? Sl 0:00 apache2 21132 ? Ss 0:04 apache2
OS Xでの出力です。
42582 ?? Z 0:00.00 (smbclient) 46529 ?? Z 0:00.00 (smbclient) 46539 ?? Z 0:00.00 (smbclient) 46547 ?? Z 0:00.00 (smbclient) 46586 ?? Z 0:00.00 (smbclient) 46594 ?? Z 0:00.00 (smbclient)
LinuxでもOS Xでも、grepは終了コードを返すので、プロセスが見つかったかどうか簡単にチェックできます。
#!/bin/bash
ps cax | grep httpd > /dev/null
if [ $? -eq 0 ]; then
echo "Process is running."
else
echo "Process is not running."
fi
さらに、もしPIDのリストが欲しいのであれば、それらも簡単にgrepすることができます。
ps cax | grep httpd | grep -o '^[ ]*[0-9]*'.
LinuxとOS Xで出力が同じになるもの。
3519 3521 3523 3524
の出力は空文字列であり、この方法は実行されていないプロセスに対して安全である。
echo
ps cax | grep aasdfasdf | grep -o '^[ ]*[0-9]*'
この方法は、単純な空文字列のテストを書き、その後、発見されたPIDを繰り返し実行するのに適しています。
#!/bin/bash
PROCESS=$1
PIDS=`ps cax | grep $PROCESS | grep -o '^[ ]*[0-9]*'`
if [ -z "$PIDS" ]; then
echo "Process not running." 1>&2
exit 1
else
for PID in $PIDS; do
echo $PID
done
fi
実行権限(chmod +x running)でファイル("running"という名前)に保存して、パラメータをつけて実行するとテストできます。
./running "httpd"
#!/bin/bash
ps cax | grep httpd
if [ $? -eq 0 ]; then
echo "Process is running."
else
echo "Process is not running."
fi
警告!!!
の出力を単にパースしているだけであることに留意してください。
ps ax
の出力を単に解析しているに過ぎないということに留意してください。 つまり、Linux の出力に見られるように、単にプロセスにマッチするだけでなく、 そのプログラムに渡された引数にもマッチしているのです。この方法を使うときはできるだけ具体的にすることを強くお勧めします (たとえば
./running "mysql"
は 'mysqld' プロセスにもマッチします)。私は
which
を使って、可能な限りフルパスでチェックすることを強くお勧めします。
リファレンスです。
関連
-
ディープインシステムの画面解像度を設定する方法は?ディープインシステムの解像度を設定する方法
-
Apache の一般的な設定エラー
-
[解決済み] Linuxで特定のテキストを含むすべてのファイルを検索するにはどうすればよいですか?
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] シェルで、「2>&1」はどういう意味ですか?
-
[解決済み] フォルダとそのサブフォルダ/ファイルのパーミッションを一括で変更する方法
-
[解決済み] シェルコマンドの実行と出力のキャプチャ
-
[解決済み] 現在作業しているシェルを判断する方法
-
[解決済み] 何が私のプロセスを殺したのか、なぜなのか?
-
[解決済み】bashで1つのコマンドでシェル変数にデフォルト値を割り当てる。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
LinuxでPingを無効にする、または許可する設定方法
-
Linuxにおけるxinetdサービスの管理方法に関するケーススタディ
-
deepin20ターミナルでサーバーをリモート管理する方法
-
deepin depth systemはどのような内容でアップデートされましたか?deepinの最新版アップデート内容まとめ
-
deepin20のソフトをアンインストールする方法を教えてください。deepinのアプリケーションをアンインストールする2つの方法
-
2020年deepin Deep OS V20のアップデートによる更新情報
-
sudo が sudo として表示される: setuid root である必要がある
-
[解決済み] 標準エラー出力を /dev/null にリダイレクトする。
-
[解決済み] エラーです。Can't open display: (null)と表示されることがあります。
-
[解決済み] Linuxで特定のポートで動作しているプロセスを停止させる方法は?