pepoとネットワークを語ろう

40年前からこれまでとこれからのネットワークを語る

msleepとsleepとusleepをくらべたよ、うーねむい、sleepy(@Д@;

2011-10-10 09:31:11 | Linux

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

 


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。