誰かが私に次の情報を提供するシェルスクリプトを書くのに役立ちますか?
- プロセス状態
- CPUでプロセスが経過した時間。
- 使用された合計メモリ(KB)
- 開かれたファイル記述子の数。
- プロセスを開始するコマンドライン - このプロセスによって開始されたプロセスのPID。
JSON形式でなければならず、次のようになります。
{
"pid" : 2714,
"status" : "S",
"usageCPU" : 1233,
"usageMemoire" : 404,
"numFD" : 12,
"commande line" : "/bin/bash",
"task" :
[
{ "pid" : 2714 },
{ "pid" : 4230 }
] }
もう一つ:
入力パラメータ:
プログラムは次の入力パラメーターを使用します。 - 情報を望むプロセスのpid。要約すると、プログラムを起動するには次のコマンドが必要です。./your_program 2714
無効な形式
無効なpid番号が原因で必要な情報が見つからない場合は、次の文字列が返されます。E_PID_NOT_FOUND
PS私は数学が好きですが、この記事を書く必要がありますが、どうすればいいかわかりません。
答え1
おおよそ次のようになります。
name_of_process=$1
ps aux\
| grep $name_of_process\
| grep -v "grep"\
| awk '{print \"{\
\"pid\" : $2,\
\"status\" : $8,\
\"usageCPU\" : $10,\
\"usageMemoire\" : $4,\
\"numFD\" : $some_field_num,\
\"commandline\" : split($NF)[0]\
\":[{ \"pid\" : $2},{\"pid\" : $some_field_num_too }]}'
そのため、すべてのプロセスとそのデータのリストを提供するps
(フラグを含む)呼び出しを効果的に実行し、プロセス名を含む行のみを取得するために出力をパイプし、出力をパイプに戻します。 "grep"(信頼)というフレーズを探す代わりに、私は必要です)そして最後に、データ(今は1行にすぎません)をawkに転送します。aux
grep
grep
その後、awkはデータを列ごとに分割し(デフォルトの区切り文字はTABのようです)、awkの$number構文は与えられたデータの列に対応します。
numFDとppidの場合、デフォルトでは印刷されないため、その列が何であるかわからないため、追加のフラグを確認してどのオプションが利用可能かを確認ps
してください。aux