Open Microserver+FOMA Remote-Handをdaemontoolsでdaemonを
監視しているがやたらとsleepが気になるのと
50ミリ秒とか細かい数字でsleepさせたい場合がある
usleep 50000も桁数が多くて分かり図らい
sleep 0.05とかやっても良いんだけどなんか
psでプロセスを見たときに小数点があるのもイマイチかも
なので、msleepなんぞが標準で無いのでwebを参考に自前で作ってみた
そんでもって検証や
[root@~]# time ./msleep 100
real 0m0.107s
user 0m0.001s
sys 0m0.004s
[root@~]# time ./msleep 100
real 0m0.107s
user 0m0.001s
sys 0m0.004s
[root@~]# ldd ./msleep
linux-gate.so.1 => (0x0026c000)
libc.so.6 => /lib/libc.so.6 (0x00831000)
/lib/ld-linux.so.2 (0x0054a000)
[root@~]# ldd /bin/sleep
linux-gate.so.1 => (0x00f30000)
libc.so.6 => /lib/libc.so.6 (0x00753000)
/lib/ld-linux.so.2 (0x00b0a000)
ソースコードはescが邪魔臭いのでうまく貼り付けれんけど参考まで
[root@~]# cat msleep.c
/* licence GPLv2 ; this is milliseconds to sleep by IZAMUKARERA 2011.6.25 */
省略
int main(int argc, char *argv[]){
unsigned int msec;
if (argc < 2) {
printf("Usage: msleep ,miliseconds\n");
exit (1);
}
msec = atoi(argv[1]);
msleep(msec);
exit(0);
}
int msleep(int ms)
{
struct timeval timeout;
timeout.tv_sec = ms / 1000;
timeout.tv_usec = (ms % 1000) * 1000;
if (select(0, (fd_set *) 0, (fd_set *) 0, (fd_set *) 0, &timeout) < 0) {
perror("msleep");
return -1;
}
return 0;
}
バイナリーコードが1/3ぐらいで、まーちょいとが少ないからええか
[root@~]# ll /usr/local/bin/msleep
-rwxr-xr-x 1 root root 5569 10月 9 04:28 /usr/local/bin/msleep
[root@~]# ll /bin/sleep
-rwxr-xr-x 1 root root 17064 3月 1 2010 /bin/sleep
[root@~]# ll /bin/usleep
-rwxr-xr-x 1 root root 24792 8月 20 00:31 /bin/usleep
pepoと