プロセス検索スクリプト

今回は、psコマンドなどでPIDを調べてkillするのが面倒な場合などに便利なスクリプトを紹介しようと思う。

例えば、killしたいプロセスの名前がある程度分かっている場合などで便利だ。

まずは、実行結果を簡単に説明していこう。

基本的には、

検索→マッチしたプロセスを全て消すか選択して消すか→繰り返し・・・→終了

といったように、対話的に実行していく。

$ ./process_search_kill.pl
Argv error.
$ ./process_search_kill.pl irc

PID     Deny(*) (PROCESS INFO)
=========================
3756    *       (root      3756  0.0  0.4   .* ircd -c)
6870    *       (root      6870  0.0  0.9   .* ./irc_write_httpd.pl)
8111            (500       8111  0.0  0.9   .* ./irc_write_message.pl)
8112            (500       8112  0.0  0.9   .* ./irc_write_secure.pl)
8942    *       (root      8942  0.0  0.9   .* ./irc_write_httpd.pl)
8943    *       (root      8943  0.0  0.9   .* ./irc_write_httpd.pl)
=========================
( * :Permission deny or killing now)

PID is accessible:      8111 8112
PID is not accessible:  3756 6870 8942 8943

kill above all/select process except * ?[all/select/finish]:select
Select[finish/PID is alive].
[8111 8112 finish]:8111
kill 8111

PID     Deny(*) (PROCESS INFO)
=========================
3756    *       (root      3756  0.0  0.4   .* ircd -c)
6870    *       (root      6870  0.0  0.9   .* ./irc_write_httpd.pl)
8112            (500       8112  0.0  0.9   .* ./irc_write_secure.pl)
8942    *       (root      8942  0.0  0.9   .* ./irc_write_httpd.pl)
8943    *       (root      8943  0.0  0.9   .* ./irc_write_httpd.pl)
=========================
( * :Permission deny or killing now)

PID is accessible:      8112
PID is not accessible:  3756 6870 8942 8943

Select[finish/PID is alive].
[8112 finish]:finish

$

このように、第一引数に検索文字列を指定し、実行すると、文字列に一致するプロセス一覧が表示される。

そして、実行したユーザーがアクセス不可なプロセスには「*」が付けられる。

これで、「all」によって、アクセス可能なプロセスを全てkillするか、「select」によってプロセスを選択しながらkillしていくことができる。

最後は「finish」で終了する。

結構単純なスクリプトだが、意外と便利だ。

以下にソースを示す。

続きを読む

syslogの出力をスクリプトに渡す方法

前回の記事で、apacheのログ出力をスクリプトに渡すには、httpd.confのCustomLogの部分をパイプを使って書けばいいだけでした。

しかし、syslogの場合は、syslog.confに同様の記述をすると、スクリプトのソース内にログを出力してしまいます。

そのため、syslogの出力をスクリプトに渡すには少し工夫がいるわけです。

今回はその手順を簡単に説明します。

続きを読む

ircでapacheのログをリアルタイムで監視

自宅サーバーでも日常的にapacheのログを監視したいけど、いちいちサーバーに入ってコマンドたたいて・・・っていうのが面倒だと思います。

そこで、ircサーバーを使って、apacheのログ監視をする方法があります。ircサーバーのチャンネルにapacheのアクセスログを出力することで、リアルタイムでアクセスがあればircのクライアントに表示されるという仕組みです。アクセスログをircサーバーに書き込むスクリプトをperlを使って書いてみました。

apacheのhttpd.confに以下のように追記するだけで、スクリプトを経由してリアルタイムでircに出力してくれます。

CustomLog "|/root/src/irc_write_httpd.pl" combined

スクリプトはこんな感じです。

ソケットを使うことを意識して書いてみました。

続きを読む

ソケット通信でHTTPブラウザ

ソケット通信の勉強として、HTTPでHTMLを取得するコンソールブラウザみたいなものを、perlで作ってみました。

アプリケーション層のみの実装でいいので、かなり簡単にできてしまうんです。

次回はこれを利用して、動的IPのチェックスクリプトみたいなものを作ろうと思います。

実行は以下のように、URLを第一引数にとって実行します。

./browser.pl http://www.google.cp.jp/

実行するとHTMLのソースが標準出力されます。

ソースは以下。

続きを読む

Perlでshを呼び出した場合の実行速度

Perlで、shを実行できますよね。

shって結構お手軽で便利なコマンドがあるので、perlの中でも使いがちがんですが、実はかなり実行速度が遅いんですよね。

こういう話をどっかで聞いていたんで、実際にテストしてみました。
このテストでは、perlでファイルをreadするときに、perl内でハンドルをopenして読み込むか、sh呼び出してcatを用いるかで比較しました。

するとこんな結果になりました。

# ./roupe_test.pl
=== Start!! ===
--- PERL_TEST(FILE Read [perl_roupe]) ---
[test 1](0s .85510ms)
[test 2](0s .73861ms)
[test 3](0s .73888ms)
[test 4](0s .74111ms)
[test 5](0s .74027ms)

--- PERL_TEST(FILE Read [sh_roupe]) ---
[test 1](4s .-69818ms)
[test 2](4s .-182927ms)
[test 3](4s .-141415ms)
[test 4](4s .-171225ms)
[test 5](3s .855982ms)

=== Finish!! ===

これって結構な差ですよね。

続きを読む