Вы можете изменить имя листа и переменную строки и попробовать:
Option Explicit
Sub test()
Dim Row As Long
Row = 114
Do Until Row = 121
With ThisWorkbook.Worksheets("Sheet1")
.Cells(Row, 2).Interior.Color = .Cells(Row, 7).Interior.Color
End With
Row = Row + 1
Loop
End Sub
Я бы использовал pgrep
для этого (осторожно, непроверенный код):
exec("pgrep lighttpd", $pids);
if(empty($pids)) {
// lighttpd is not running!
}
У меня есть сценарий bash, который делает что-то подобное (но с SSH туннели):
#!/bin/sh
MYSQL_TUNNEL="ssh -f -N -L 33060:127.0.0.1:3306 tunnel@db"
RSYNC_TUNNEL="ssh -f -N -L 8730:127.0.0.1:873 tunnel@db"
# MYSQL
if [ -z `pgrep -f -x "$MYSQL_TUNNEL"` ]
then
echo Creating tunnel for MySQL.
$MYSQL_TUNNEL
fi
# RSYNC
if [ -z `pgrep -f -x "$RSYNC_TUNNEL"` ]
then
echo Creating tunnel for rsync.
$RSYNC_TUNNEL
fi
Вы можете изменить этот сценарий с помощью команд, которые вы хотите отслеживать.
Если вы делаете это в php, почему бы не использовать код php:
В работающей программе:
define('PIDFILE', '/var/run/myfile.pid');
file_put_contents(PIDFILE, posix_getpid());
function removePidFile() {
unlink(PIDFILE);
}
register_shutdown_function('removePidFile');
Затем, в программе сторожевого таймера, все, что вам нужно сделать is:
function isProcessRunning($pidFile = '/var/run/myfile.pid') {
if (!file_exists($pidFile) || !is_file($pidFile)) return false;
$pid = file_get_contents($pidFile);
return posix_kill($pid, 0);
}
По существу, posix_kill имеет специальный сигнал 0
, который фактически не отправляет сигнал процессу, но он проверяет, может ли сигнал быть отправлено (процесс на самом деле запущен).
И да, я использую это довольно часто, когда мне нужны длительные (или, по крайней мере, наблюдаемые) процессы php. Обычно я пишу сценарии инициализации для запуска программы PHP, а затем имею сторожевой таймер cron, чтобы ежечасно проверять, работает ли он (и если нет, то перезапустить его) ...
Попробуйте это
function processExists ($pid) {
return file_exists("/proc/{$pid}");
}
Функция проверяет, существует ли файл процесса в корневом каталоге /proc/
. Работает только для Linux
Я не видел здесь упомянутого, но вот еще один подход, позволяющий исключить второй grep из уравнения, я использую его со многими моими PHP-скриптами и должен работать универсально
exec("ps aux | grep -i '[l]ighttpd -D'", $pids);
if(empty($pids)) {
print "Lighttpd not running!\n";
} else {
print "Lighttpd OK\n";
}
Наслаждайтесь.
У меня есть функция для получения pid процесса...
function getRunningPid($processName) {
$pid = 0;
$processes = array();
$command = 'ps ax | grep '.$processName;
exec($command, $processes);
foreach ($processes as $processString) {
$processArr = explode(' ', trim($processString));
if (
(intval($processArr[0]) != getmypid())&&
(strpos($processString, 'grep '.$processName) === false)
) {
$pid = intval($processArr[0]);
}
}
return $pid;
}
Вы можете попробовать следующее, которое сочетает в себе кусочки этих двух подходов:
function processExists($processName) {
$exists= false;
exec("ps -A | grep -i $processName | grep -v grep", $pids);
if (count($pids) > 0) {
$exists = true;
}
return $exists;
}
Если это не сработает, вы можете просто попробовать запустить команду ps в вашей системе и посмотреть, что она выдаст.