За последние 24 часа нас посетили 52396 программистов и 1724 робота. Сейчас ищут 872 программиста ...

Работа с процессами линукс из php

Тема в разделе "Прочие вопросы по PHP", создана пользователем doozookn, 26 окт 2015.

  1. doozookn

    doozookn Новичок

    С нами с:
    30 сен 2015
    Сообщения:
    16
    Симпатии:
    0
    Всем привет, на локальной машине стоит apache2, работающий из под имени нужного пользователя, и через него выполняются разные манипуляции над некоторыми файлами на этой же локальной машине. Эти задачи ограничиваются копированием директории и запуском исполняемого файла из этой директории. Делается это командой
    Код (PHP):
    1. exec('Путь/до/исполняемого/файла'); 
    Все как нельзя хорошо, запускаеся исполняемый файл и собственно выполнение команды завершается по ручному закрытию этого файла(там открывается гуи приложение)

    Но вот задача, надо перед открытием этого исполняемого файла запустить еще один процесс, который не гуи а запускается в фоне. Как сделать так, чтобы
    1. Не нужно было ждать окончания этого процесса, чтобы запустить гуи приложение
    2. Первый процесс выгружался по закрытию гуи приложения.

    Всем спасибо, извините, если вопрос из ряда вон)
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    я жирным акцентирую на стандартный метод отправки процессов в фон - амперсанд
    Код (Text):
    1. /bin/command &
    я бы предложил некоторую обертку вокруг этих процессов. сам апач запускает обертку с амперсандом, то есть не блокирует себя ожиданием завершения работы обертки. а обертка запускает в свою очередь в свой фон первое приложение, открывает гуи (и ждет его закрытия) после чего отправляет сигнал завершения первому приложению и благополучно умирает.
     
  3. doozookn

    doozookn Новичок

    С нами с:
    30 сен 2015
    Сообщения:
    16
    Симпатии:
    0
    Спасибо, про амперсанд это моя оплошность, что не отразил эту мысль изначально в посте. А вот про обертку можно хотя бы намек на пример, если не сложно? Я просто совершенно профан в пхп. Спасибо заранее
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а причем тут пхп? это обычный баш, саш или какой там шел принят в вашем дистрибутиве. апач (да, модпхп это модуль апача а не отдельный процесс) должен выполнить эту обертку через exec() и всё. ваше "путь до исполняемого файла" надо заменить на путь к обёртке. а её содержимое видимо выглядит примерно так:
    Код (Text):
    1. #!/usr/bin/env bash
    2. /path/to/first/command-running-in-background &
    3. /path/to/second/command-long-running-gui
    4. kill /path/to/first/command-running-in-background
    первая строка шэбэнг до интерпретатора который исполнит весь код. нашем случае - баш. вторая запустит первый процесс и не будет ждать его окончания. третья запустит гуи и будет ждать окончания. четвертая убьет первый процесс по имени образа. всё. не забыть chmod +x и можно тестировать. сразу замечу что многопоточности не поддерживает - если будет запущено два гуи то тот который первым завершится убьет второму ту самую программу которую обязательно запускать в фоне.
     
  5. doozookn

    doozookn Новичок

    С нами с:
    30 сен 2015
    Сообщения:
    16
    Симпатии:
    0
    Спасибо понял свою гупость, работаю в баш над этой задачей