2012年5月30日水曜日

xargsの使い方

1.標準入力から次々と行を読み込む
2.終端に達するか、コマンドに与えられる引数に等しい数に達するまで続ける
3.読んだデータを引数に与えられたコマンドを起動する
4.標準入力からまだ読めるデータがあれば 1.へ



基本
find . -not -name '*.bz2' | xargs bzip2

応用
find . -not -name '*.bz2' | xargs -L 1 -P 2 bzip2
最大2プロセスで実行し(-P 2)、各プロセスには引数を1つずつ与える(-L 1)。

注意点。
xargsで起動されるコマンドが軽い、かつ引数の数が多い場合、
並列実行によるメリットよりもコマンド起動回数(fork回数)によるデメリットの方が上回る可能性が高い。
-L で指定する数を多くするなどして対処。

参考 thanx
http://d.hatena.ne.jp/tagomoris/20110513/1305267021


見つけたファイルをコピー
find ./ -name '*.txt' | xargs -I % -t cp -p % mydir



2012年5月22日火曜日

coredump設定

csh系
coredumpファイル生成する unlimit coredumpsize
coredumpファイル生成しない limit coredumpsize 0

bash
ulimit -c unlimited



2012年5月18日金曜日

プロセスグループをkill killpg

#include <stdio.h>
#include <signal.h>
#include <errno.h>
#include <stdlib.h>

int main()
{
int pgrp;
int sig = SIGKILL;
int status;

printf("PPID = ");scanf("%d", &pgrp);

status = killpg(pgrp, sig);
if(status) {
printf("Error status=%d errno=%d\n", status, errno);
exit(1);
}

return 0;
}



coredumpコアダンプ segmentation fault プログラム

coredump コアダンププログラム

#include <stdio.h>

int main()
{
*(int *)0x0 = 1;

return 0;
}



segmentation faultプログラム
#include <stdio.h>
#include <stdlib.h>

int main()
{
abort();

return 0;
}



2012年5月12日土曜日

シェル bash if文 結果

#!/bin/sh

STRINGS="findstrings"

grep $STRINGS log.log
result=$?
echo "grep result=$result"

if [ $result -ne 1 ]
then
/bin/echo "########## ERROR ##########"
exit 1
fi

exit 0



スクリプト bash ランダムにsleepする

スクリプト bash ランダムにsleepする

1秒~10.99秒sleepウェイトする

#!/bin/bash


#DICE=$(((RANDOM%6)+1))
#DICE=$(((RANDOM%1000)+1)) # 1-1000
#DICE=$((RANDOM%1000)) # 0-999
DICE=`expr $RANDOM % 1000` # 0-999
echo "DICE=$DICE"

#wait_s=$(printf %.3f `echo $DICE/100 | bc -l`)
#echo $wait_s

wait_us=`expr $(echo $DICE*10000 | bc -l) + 1000000` # 1s-10.99s
echo "Sleep $wait_us [us] (-.-)Zzz..."


# for debug
read START dummy < /proc/uptime
#echo $START

usleep $wait_us

# for debug
read END dummy < /proc/uptime
#echo $END

echo -n "(@o@)! Elaps [s] = "

# for debug
echo $END-$START | bc -l

exit 0