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月30日水曜日
xargsの使い方
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