Несколько вопросов по автономным скриптам

Phristen

Новичок
Несколько вопросов по автономным скриптам

1) Как узнать, существует ли процесс с определённым PID? POSIX на хосте выключен. Парсинг возвращаемого значения "ps -u `whoami`" не предлагать :)
2) Есть ли способ запустить скрипт в бэкграунде без exec, system, и т.п.? Есть ли способ "перевести" скрипт в бэкграунд из самого скрипта?
3) Нормально ли это, что бесконечный foreground скрипт, даже с ignore_user_abort() и set_time_limit(0), прерывается через 10-15 минут после запуска (через браузер)?
4) При каких условиях может не выполняться register_shutdown_function (точнее, зарегестрированная функция)? Есть ли способ гарантированного выполнения определенных действий при окончании скрипта? А то у меня функция то выполняется, то нет (при обстоятельствах, описанных в вопросе №3).
5) Ну и самое главное. Постил в другой теме, там никто не ответил. При запуске exec ("php ..."), скрипт (который вызывает exec), начинает выполняться заново, до бесконечности. При этом, каждый раз создается новый процесс, и не имеет значения, что идёт после "php". Даже при exec("php -v") всё тоже самое :(
Например в скрипте есть две строки:
<?
echo "[start]\n";
system ("php -v");
?>

В браузер поступает следующее:
[start]
Content-type: text/html X-Powered-By: PHP/4.3.11 [start]
Content-type: text/html X-Powered-By: PHP/4.3.11 [start]
Content-type: text/html X-Powered-By: PHP/4.3.11 [start]
Content-type: text/html X-Powered-By: PHP/4.3.11 [start]
Content-type: text/html X-Powered-By: PHP/4.3.11 [start]
Content-type: text/html X-Powered-By: PHP/4.3.11 [start
... и т.д., пока сам на stop не нажму.
Другие команды работают нормально, один раз.

-~{}~ 08.01.07 00:13:

Ну что, никто не знает? Или я глупость какую-то спрашиваю?

Ладно, вот ещё один вопрос, хотя и по другой теме.
Как сделать функцию для прямой модификации многомерных массивов?
например, чтобы вызов arrayModif($array, "value", 1, 2, 3, 4) был эквивалентен выражению $array[1][2][3][4] = "value"?

Делаю так:
Код:
	function arraySet (&$arr, $val) {
		$cur = &$arr;
		foreach (func_get_args() as $i => $arg)
			if ($i > 1) $cur = &$cur[$arg];
		$cur = $val;
	}
И как ни странно, работает, НО... Все сабмассивы превращаются в указатели к ним. Т.е., когда делаю var_dump, вместо "array" получается "&array". Что делать-то?
Это референсы в PHP такие кривые, или мои руки?
 

phprus

Moderator
Команда форума
Phristen
2) Я думаю, что тебе нужен cron
3) Нормально. Сервер не преднозначен для выполнения бесконечных скриптов. Запускай их с консоли.
5) Ты в этом уверен? Если это действительно так, то попробуй обновить php. У меня на php5.2.0 все работает так как надо.

arrayModif($array, "value", 1, 2, 3, 4)
Зачем ты пытаешся сделать такоой код?
eval
 

phprus

Moderator
Команда форума
SiMM
А как? Я не предстовляю как можно без него это сделать. Если вам не трудно приведите пример кода. Если не хотите писать его в этой теме отправте пожалуйста при помощи личного сообщения.
 

Phristen

Новичок
Эх, душа что-то к евалу не лежит :) Ну ладно, а как узнать в PHP имя переменной $var? Т.е., фактически, получить строку "var"?

2) Я думаю, что тебе нужен cron
Я тоже так думаю, но крона нет.

Пойду ещё потыркаюсь...

-~{}~ 08.01.07 20:55:

На PHP 5.1.4 всё тоже самое... М-да.
 

SiMM

Новичок
> А как?
А выше код arraySet'а глянь.

> НО... Все сабмассивы превращаются в указатели к ним.
А это как-то мешает?
 

Phristen

Новичок
Через exec ("nice /web/cgi-bin/php5 scheduler.php > /dev/null 2>&1 &") смог добиться следующего:
PID PPID C STIME TTY TIME CMD
.
.
.
23989 1 0 09:24 ? 00:00:00 /web/cgi-bin/php5 scheduler.php
.
.
Однако, сам скрипт scheduler.php не выполняется. Ещё идеи?
Ну хоть самые невероятные!
 
Сверху