Исправить исключение NullReferenceException можно с помощью Null-условных операторов в c # 6 и написать меньше кода для обработки нулевых проверок.
Он используется для проверки нуля до выполнения доступа к члену (?. ) или index (? [).
Пример
var name = p?.Spouse?.FirstName;
эквивалентен:
if (p != null)
{
if (p.Spouse != null)
{
name = p.Spouse.FirstName;
}
}
В результате имя будет нулевым когда p равно null или когда p.Spouse имеет значение null.
В противном случае имени переменной будет присвоено значение p.Spouse.FirstName.
Для получения дополнительной информации: Операторы с нулевым условием
Вы можете запустить команду в фоновом режиме, добавив в конце &
в конце:
exec('run_baby_run &');
. Но выполнение этого будет зависать с вашим скриптом, потому что:
Если программа запускается с помощью функции exec, чтобы она продолжала работать в фоновом режиме, выход программы должен быть перенаправлен в файл или другой выходной поток. В противном случае PHP зависнет до тех пор, пока выполнение программы не закончится.
blockquote>Таким образом, вы можете перенаправить команду stdout команды в файл, если вы хотите увидеть ее позже или
/dev/null
, если вы хотите отбросить его как:exec('run_baby_run > /dev/null &');
"exec nohup setsid your_command"
blockquote> blockquote>nohup позволяет вашей команде продолжать, даже если запущенный процесс может завершиться первым. Если это произойдет, сигнал SIGNUP будет отправлен в команду your_command, что приведет к ее завершению (если только он не поймает этот сигнал и не обратит на него внимания).
Это использует wget, чтобы уведомить URL-адрес чего-либо, не ожидая.
$command = 'wget -qO- http://test.com/data=data';
exec('nohup ' . $command . ' >> /dev/null 2>&1 & echo $!', $pid);
Это использует ls для обновления журнала без ожидания.
$command = 'ls -la > content.log';
exec('nohup ' . $command . ' >> /dev/null 2>&1 & echo $!', $pid);
Всегда полезно проверить документацию :
. Чтобы выполнить команду, не повредить ваш php-скрипт во время его запуска, запущенная вами программа не должен возвращаться к php. Для этого переадресуйте как stdout, так и stderr в / dev / null, а затем запустите его.
>
/dev/null 2>&1 &
Чтобы выполнить команду и выпустить ее как другую процесс, который не зависит от потока apache для продолжения работы (не умрет, если кто-то отменяет страницу) запустит это:
blockquote>
exec('bash -c "exec nohup setsid your_command > /dev/null 2>&1 &"');