Создание детского процесса в системах UNIX?
-
22-09-2019 - |
Вопрос
Я пытаюсь создать дочерний процесс в другом процессе. Я пишу обе программы на языке 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 & 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 ;-), пожалуйста, отредактируйте свои обильные детали о том, как код ведет себя иначе, чем вы ожидаете.