четверг, 17 июля 2014 г.

Полезные статьи на Хабре

Как узнать прогресс исполнения команды dd

Когда я начал активно использовать команду dd, меня стало сильно напрягать отсутствие какой-либо индикации выполнения команды. Кроме того, хотелось узнать, а долго ли еще ждать.

Оказалось, нужно внимательно читать help:

$ dd if=/dev/zero of=/dev/null&
[1] 6826
$ kill -USR1 6826
43492667+0 records in
43492667+0 records out
22268245504 bytes (22 GB) copied, 19,1004 s, 1,2 GB/s

или в общем случае:

$ dd if=/dev/zero of=/dev/null& pid=$!
$ kill -USR1 $pid
18335302+0 records in
18335302+0 records out
9387674624 bytes (9.4 GB) copied, 34.6279 seconds, 271 MB/s

вторник, 15 июля 2014 г.

Простой демон

Функция создания демона

int daemonize()
{
 int pid = fork();
 if (pid == -1) // ошибка
 {
  printf("Start Daemon Error: %s\n", strerror(errno));
  return 1;
 }
 else if (!pid) // если это потомок
 {
  umask(0);
  setsid();
  chdir("/");
  close(STDIN_FILENO);
  close(STDOUT_FILENO);
  close(STDERR_FILENO);
  return 0;
 }
 else // если это родитель
 {
  // завершим процесс
  exit(0);
 }
 
}

Использование

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/stat.h>

int main(int argc, char** argv)
{
 //Создаем из процесса демона
 int res = daemonize();
 if(res)
  return -1;
 
 //Основной код программы ...
 return 0;
}