пятница, 16 марта 2012 г.

md5 в PHP

Вполне себе стандартный :) Выдача совпадает с выдачей стандартной утилиты.

md5 domains.txt
MD5 (domains.txt) = c97d110cfd4d53633d5dd1cd881b7e1d

php -r "echo md5_file('domains.txt');"
c97d110cfd4d53633d5dd1cd881b7e1d

среда, 14 марта 2012 г.

Пример многопроцессного приложения на PHP с использованием pcntl_fork

Код:
# based on: http://php.net/manual/ru/function.pcntl-fork.php
$worker_processes = 5;
$child_processes = array();

for ($i = 0; $i < $worker_processes; $i++) {

    $child_pid = pcntl_fork();
    
    if ($child_pid == -1) {
        die ("Can't fork process");
    } elseif ($child_pid) {
        print "Parent, created child: $child_pid\n";
        $child_processes[] = $child_pid;     
    
        # В данный момент все процессы отфоркнуты, можно начать ожидание
        if ($i == ( $worker_processes -1 ) ) {
            foreach ($child_processes as $process_pid) {
                # Ждем завершение заданного дочернего процесса
                $status = 0;
                pcntl_waitpid($process_pid, &$status); 
            }
        }
    } else {
        print "Child $i\n";
        sleep(10 + $i);
    
        # Если здесь не будет exit, то foreach заработает и здесь
        exit(0);
    }

}


Алгоритм - мастер-процесс запускает 5 дочерних процессов и ждет окончание их всех, после этого он сам завершает свою работу.

Использование proctitle в PHP для смены имени процесса

Устанавливаем:
pecl install proctitle channel://pecl.php.net/proctitle-0.1.1
echo "extension=proctitle.so" > /etc/php5/conf.d/proctitle.ini

Пример кода, использующего смену имени процесса:
setproctitle("my_super_process");
while(true) { sleep(10); }

Запускаем:
php -f test_proctitle.php

Убеждаемся, что используется заданное нами имя процесса:
ps aux|grep my_
root 26611 0.0 0.0 292120 12044 pts/8 S+ 18:32 0:00 my_super_process
root 26645 0.0 0.0 112316 876 pts/9 S+ 18:33 0:00 grep my_

Немецкая служба спасения ADAC

http://www.dw.de/dw/article/0,,5178295,00.html

четверг, 8 марта 2012 г.

Информация о повторном получении визы США

http://www.ustraveldocs.com/ru_ru/ru-niv-visarenew.asp

Подробное описание архитектуры популярных Open Source проектов

http://www.aosabook.org/en/index.html

VNC в Google Chrome

http://moskalyuk.name/3840

Почему ваша следующая фабрика будет находиться только в Китае

http://moskalyuk.name/3962

вторник, 6 марта 2012 г.

Что означает ошибка "BUG: soft lockup - CPU#0 stuck for Xs!" ?

Она означает, что на данном ядре не происходила операция reschedule в течение X секунд. Иными словами (на моем уровне понимания), один процесс все это время монопольно занимал все ядро целиком и другие процессы не могли от него получить процессорного времени (то есть, как раз выполнить тот самый решедулинг - приостановить один процесс и предоставить процессорное время другому). Иными словами, это блокировка, которая блокирует работу одного/нескольких ядер. Чем вызвана - причин множество, в том числе баг ядра.

Источник: http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/kernel/softlockup.c

Как настроить автоматический ребут Linux систем при возникновении кернел паника?

Очень просто: http://www.cyberciti.biz/tips/reboot-linux-box-after-a-kernel-panic.html

Cмена прав для вновь создаваемых файлов на FreeBSD

Стандартно для обычных пользователей во FreeBSD umask стоит в значении 022, это далеко не всегда удобно, так как сбрасывает право записи в файл для пользователей группы. Если это требуется изменить, то нужно открыть файл:
vi /etc/login.conf

Скорректировать строку:
:umask=002:

После этого перестроить конфиги:
cap_mkdb /etc/login.conf

Все, после этого достаточно выйти / войти в консольную сессию и значение umask изменится на новое. Кроме этого, обращаю внимание, что umask для root меняется иначе.

Установка Nginx 1.1 на FreeBSD 8.2

Компилируем:
cd /usr/ports/www/nginx
make install clean

Добавляем в автозапуск:
vi /etc/rc.conf

Добавляем там:
nginx_enable="YES"

Запускаем:
/usr/local/etc/rc.d/nginx start

Перевозка велосипеда в самолете

http://velopiter.spb.ru/articles/aviabag.htm