私はスクリプトを書いていますが、それがどれだけ安定して移植可能かを知りたいです。
#!/bin/bash
threadsPlease() {
ps -mo lwp,c -p $1 | sort -gk 2 | uniq -f 1
}
THREAD_LINE=$( threadsPlease $1 | grep -v - | tail -1)
THREAD10=$(echo $THREAD_LINE | awk '{print $1}')
THREAD16=$(printf '%x\n' $THREAD10)
JAVA_LINE=$(jstack $1 | grep $THREAD16)
echo "OS data (thread, CPU usage %): " $THREAD_LINE
echo "Java thread: " $JAVA_LINE
スクリプトは、Java PID が指定されたシステムおよび Java スレッド・データを表示します。実行例:
./whichThreadIsIt.sh 6814
OS data (thread, CPU usage %): 6838 3
Java thread: "AWT-EventQueue-0" #19 prio=6 os_prio=0 tid=0x00007f50f4090800 nid=0x1ab6 waiting on condition [0x00007f510dfbb000]
Q1:明らかなもの(「jstack / java / awk / ...が利用できないか、パスにありません」または「間違った入力データが提供されました」)に加えて、これが期待どおりに機能しない場合(Ubuntu / Debian)はいつですか?
質問2:私の友人は、「シェルスクリプトよりもシェルを移植する方が簡単です」と言います。それでは、Fedora / CentOS、Free BSD、およびSolarisでこれを達成するにはどれくらいの労力が必要ですか?スムーズに実行されると期待するのは間違っていますか(Bashがこのボックスに存在すると仮定)
答え1
#!/usr/bin/env bash
一般的bash
に。/usr/local/bin/bash
env
ps
特にSysVシステム(Solarisなど)でBSD / GNUismを使用したい場合は、特に移植できないコマンドです。 1つの解決策は、GNUツールをどこかにインストールし、それを含めるようにPATHを変更することです。