ブラウザからのデバック中とかに、うっかり無限ループさせてCPUがフル回転に
なっちゃったときとか、Fedoraのシステムモニタ(Windowsでいう
タスクマネージャ?)で止めたいプロセスIDを探したくても、apacheユーザーで
動かしたプロセスは、1ユーザーでログインしてる場合は表示されない。
(rootでログインしないと表示されない)
そんなとき、てっとりばやく騒音をおさえたいのでメモ。
コマンドラインからSUになり、
--------------------------------------------------------
#top
--------------------------------------------------------
コマンドを実行すると、実行中のプロセスIDなどがCPU負荷の高い順に表示されるので、
停止させたいプロセスIDを見つけて、
--------------------------------------------------------
#kill -9 プロセスID
--------------------------------------------------------
これが一番早いかな。
自分がapacheのグループに入ってればシステムモニタで確認できるのかな?
まだ試してないけど。
よく使うのだが、なぜか忘れやすいのでメモ。
<html>
<head>
<script type="text/javascript">
var count;
function BoxChecked(check){
for(count = 0; count < document.form1.checked_user.length; count++){
document.form1.checked_user[count].checked = check;
}
}
</script>
</head>
<body>
<form name='form1' action='' method='post'>
全てチェックを
<input type='button' onClick='BoxChecked(true);' value='入れる'>
<input type='button' onClick='BoxChecked(false);' value='外す'>
<input type='checkbox' name='checked_user' value='1'>
<input type='checkbox' name='checked_user' value='2'>
・
・
・
</form>
</body>
</html>
メルマガ配信した累計秒数を管理画面で参照したりするのに、秒数をhh:mm:ss形式に
したいなーということで・・・
例えば、
10 → 00:00:10
60 → 00:01:00
3601 → 01:00:01
みたいな感じ。
これをスクリプト側で操作するとなると、累計秒をローカルタイム形式に直して
sprintfとかで整形してだらだらだら・・・
と、意外とけっこう面倒くさかったり無駄なメモリを消費したり、なんか効率悪い。
てゆーか、こういう処理はなるべく書きたくないし。
そう思って、ググってたら、目的を一発で達成できるなんとも便利なSQL文を
発見。
------------------------------------------------------------------
「SEC_TO_TIME( 秒数 )」
------------------------------------------------------------------
これで、秒数を勝手にhh:mm:ss形式に変換してくれる。
SELECT SEC_TO_TIME(秒数)
で変換&参照できるが、DBから参照するんであれば、最初から
データ型をTIMEにしておき、
※$timeには秒数を格納
INSERT INTO table VALUES('SEC_TO_TOME($time)')
とかで、あらかじめhh:mm:ss形式でデータをぶち込んでおいてやれば、
インタフェイスが変わったときも便利。
あらためて、データベースって素晴らしいと思った次第。
ちなみにこれの逆は、
TIME_TO_SEC( hh:mm:ss )で、
TIME_TO_SEC(01:00:01) は、 3601 となる。
こういった場合、今まで
-------------------------------------------------
##直後に"mogemoge"含まない文字列にマッチ
$str =~ /hogehoge[^(mogemoge)]/;
-------------------------------------------------
これでいけたような気がしたんだが、久々に同じような処理を書いてみたら
これではダメだった。
前回はなんでうまくいったのか分からないが、クラスのマッチはやはり
一文字分しか指定できないらしいので、セオリーどおり、否定先読みを使う。
-------------------------------------------------
##直後に"mogemoge"含まない文字列にマッチ
$str =~ /hogehoge(?!mogemoge)/;
##"mogemoge"の部分はさらに正規表現を使ったり、変数を使ったりもできる
my $later = "moge";
$str1 = "hogehoge";
$str2 = "hogehogemogemoge";
$str1 =~ s/hogehoge(?!($later){1,})/oeoe/;
$str2 =~ s/hogehoge(?!($later){1,})/oeoe/;
print $str1."
".$str2;
結果:
hogehogeoeoe
hogehogemogemoge
-------------------------------------------------
逆に、特定の文字列を後方に含む場合は
(?!mogemoge) を (?=mogemoge)
にかればいいだけ。