от
У меня есть сценарии оболочки, которые будут выполнять что-то вроде ниже: Файл: example.sh
#!/bin/sh
#some other code
echo "someconfig">config_file
Я надеюсь, что config_file просто содержит someconfig, но странная вещь случается с config_file, в первой строке которого стоит один «c». Я не нашел printf ('c') в родительском процессе, который выполняет example.sh Мой процесс вызовет функцию linux c, чтобы выполнить скрипт следующим образом:
#include 
#include 
#include 
#include 
#include 
#include 

int execute_shell(const char *shell)
{
    pid_t pid;
    int iRet = 0;
    if((pid = fork()) < 0)
    {
        return 

Иногда файл конфигурации выглядит странно, а не то, что отражают сценарии оболочки.

Я использую cmd для анализа возможности:
strace -f ./fork

[pid 12235] open("config_file", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
[pid 12235] fcntl(1, F_GETFD)           = 0
[pid 12235] fcntl(1, F_DUPFD, 10)       = 10
[pid 12235] fcntl(1, F_GETFD)           = 0
[pid 12235] fcntl(10, F_SETFD, FD_CLOEXEC) = 0
[pid 12235] dup2(3, 1)                  = 1
[pid 12235] close(3)                    = 0
[pid 12235] fstat(1, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
[pid 12235] mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 

Я не понимаю, что означает функция = num?
Я буду признателен, если кто-то анализирует, что означает выход strace.

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

В моем проекте мы просто используем код linux c и выполняем сценарии оболочки, которые выводят someconfig в config_file. Он работает 6 месяцев в обычном режиме, но однажды конфигурация выглядит странно (две машины с одинаковой ошибкой, первая строка с не эхо).

Я просто хочу поговорить, если есть какая-либо возможность, чтобы иметь направление, чтобы решить проблему.

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

        

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

1 Ответ

0 голосов
от
следующий предложенный код: чисто компилируется выполняет желаемую функциональность правильно обрабатывает любые сбои, замеченные в подфункции правильно вызывает функцию:
execlp()
Вот что я исправил: вызов (и результаты) execlp () обработка вызова fork (), когда он терпит неудачу вызов
waitpid()
, когда он возвращает ошибку. добавлены операторы include для:
...