PHP на машине окон; Запустите процесс в фоне

Я ищу лучшее, или любой путь действительно для запуска процесса с php в фоновом режиме, таким образом, я могу уничтожить его позже в сценарии.

Прямо сейчас я использую: shell_exec ($Command); проблема с этим - это, ожидает программы для закрытия.

Я хочу что-то, что будет иметь тот же эффект как nohup, когда я выполню команду оболочки. Это позволит мне выполнять процесс в фоновом режиме, так, чтобы позже в сценарии он мог быть закрыт. Я должен закрыть его, потому что этот сценарий будет работать регулярно, и программа не может быть открыта, когда это работает.

Я думал о генерации .bat файла для выполнения команды в фоновом режиме, но даже затем, как я уничтожаю процесс позже?

Код я видел Linux:

$PID = shell_exec("nohup $Command > /dev/null & echo $!");
// Later on to kill it
exec("kill -KILL $PID");

Править: Оказывается, что я не должен уничтожать процесс

7
задан Mobiler 16 January 2013 в 14:41
поделиться

2 ответа

Будет ли это функция в Руководстве PHP Справка?

function runAsynchronously($path,$arguments) {
    $WshShell = new COM("WScript.Shell");
    $oShellLink = $WshShell->CreateShortcut("temp.lnk");
    $oShellLink->TargetPath = $path;
    $oShellLink->Arguments = $arguments;
    $oShellLink->WorkingDirectory = dirname($path);
    $oShellLink->WindowStyle = 1;
    $oShellLink->Save();
    $oExec = $WshShell->Run("temp.lnk", 7, false);
    unset($WshShell,$oShellLink,$oExec);
    unlink("temp.lnk");
}
5
ответ дан 6 December 2019 в 08:43
поделиться

Вот пример из Google. Finite_faces_iterator был набран.

  Interval_skip_list isl;
  for(Finite_faces_iterator fh = dt.finite_faces_begin();
      fh != dt.finite_faces_end();
      ++fh){
    isl.insert(Interval(fh));
  }
  std::list<Interval> level;
  isl.find_intervals(50, std::back_inserter(level));
  for(std::list<Interval>::iterator it = level.begin();
      it != level.end();
      ++it){
    std::cout << dt.triangle(it->face_handle()) << std::endl;
  }

Это делает не то, что вы хотите, но дает вам пример того, что можно сделать с помощью итератора.

-121--2410600-

Получение соединения JDBC от EntityManager в EclipseLink получает ответ в вики EclipseLink .

Способ отличается в зависимости от версии API JPA. Вот выписка из вики:

JPA 2,0

entityManager.getTransaction().begin();
java.sql.Connection connection = entityManager.unwrap(java.sql.Connection.class);
...
entityManager.getTransaction().commit();

JPA 1,0

entityManager.getTransaction().begin();
UnitOfWorkImpl unitOfWork = (UnitOfWorkImpl)((JpaEntityManager)entityManager.getDelegate()).getActiveSession();
unitOfWork.beginEarlyTransaction();
java.sql.Connection connection = unitOfWork.getAccessor().getConnection();
...
entityManager.getTransaction().commit();
-121--4780313-

Из руководства php для exec :

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

то есть передача выходных данных в файл и php не будет ждать его:

exec('myprog > output.txt');

Из памяти, я полагаю, есть управляющий символ, который вы можете добавить (как вы делаете с @) к семейству команд exec , который также предотвращает приостановку выполнения - не можете вспомнить, что это такое.

Изменить Найдено! В unix программы, выполняемые с & prepended, будут выполняться в фоновом режиме. Прости, не очень тебе помогает.

1
ответ дан 6 December 2019 в 08:43
поделиться