Вопрос

Я пытаюсь создать дочерний процесс в другом процессе. Я пишу обе программы на языке C. Сначала я пишу фиктивный процесс, который станет дочерним процессом. То, что он делает, только для того, чтобы написать строку на экране. Он хорошо работает самостоятельно. Затем я пишу еще одну программу, которая станет родительским процессом. Однако я не могу сделать это. Я пытаюсь использовать функции Fork и Execl вместе, но я терплю неудачу. Я также хочу, чтобы дочерний процесс не прекращался, пока родительский процесс не завершится.

Как написать родительский процесс?

Спасибо.

Вот код для детского процесса:

#include <stdio.h>

int main(void) {
  while(1) {
    printf("*");
    sleep(1);
  }
}

А вот родительский процесс:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void) {
  if (fork()) {
    while(1) {
      printf("-\n");
      sleep(5);
    }
  } else {
    execl("./", "dummy", (char *)0);
  }
}
Это было полезно?

Решение

Какая версия вы используете?Если вы пойдете на страницу API , у вас есть этот исходный код: .

class JRoute
{
    /**
     * Translates an internal Joomla URL to a humanly readible URL.
     *
     * @param   string   $url    Absolute or Relative URI to Joomla resource.
     * @param   boolean  $xhtml  Replace & by &amp; for XML compilance.
     * @param   integer  $ssl    Secure state for the resolved URI.
     *                              1: Make URI secure using global secure site URI.
     *                              0: Leave URI in the same secure state as it was passed to the function.
     *                             -1: Make URI unsecure using the global unsecure site URI.
     *
     * @return  The translated humanly readible URL.
     *
     * @since   11.1
     */
    public static function _($url, $xhtml = true, $ssl = null)
    {
        // Get the router.
        $app = JFactory::getApplication();
        $router = $app->getRouter();

        // Make sure that we have our router
        if (!$router)
        {
.

Так что метод там, определяемый прямо с самого начала (строка еще 33 или меньше).
Посмотрите здесь для документации метода: http://api.joomla.org/joomla-platform/jroute.html#method_

Другие советы

Базовое использование вилки в c

int PID = fork();

if( PID < 0 ) {
    //fail
    return PID;
}
else if( !PID ) {
    //child process
    return exec( prog, args );
} 
else {
    //parent process
    return 0;
}

Невозможно заставить дочерний процесс «не прекращать», когда это будет сделано (вы все равно сможете у родителей wait Чтобы получить информацию о том, как это прекратилось, но это все). Кроме того, любой из многих примеров fork/exec в Интернете, например Вот этот, должен работать - почему бы вам не попробовать это и посмотреть, работает ли это так, как вы хотите (в этом случае вам просто нужно изменить все, что вы делали по -другому в своей собственной попытке). Если это не работает так желательно (за исключением невозможности в соответствии с первым предложением в этом A ;-), пожалуйста, отредактируйте свои обильные детали о том, как код ведет себя иначе, чем вы ожидаете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top