Системный вызов C ++ для другой программы C ++ не работает при вызове при запуске - PullRequest
0 голосов
/ 02 января 2019

У меня есть программа на C ++, которая вызывается при запуске через cronjob (в crontab):

@reboot sudo /home/pi/CAN/RCR_datalogging/logfileControl

, которая запускает logfileControl каждый раз, когда загружается Pi, как это отображается в списке запущенных программ (ps -e).LogfileControl содержит два системных вызова программ на C ++, связанных с SocketCAN (SocketCAN является частью ядра Linux, он позволяет обрабатывать данные CAN в качестве сетевых сокетов).Я хочу, чтобы logfileControl запускался при запуске, чтобы он мог инициализировать сокет CAN (системный вызов 1), а затем запустить первый файл журнала (systemcall 2, CandumpExternal, это Candump из socketCAN с незначительными изменениями, чтобы сделать файл журнала в определенном месте, а непросто где Candump, но с использованием оригинальной версии была та же проблема).Первый системный вызов, кажется, работает должным образом, как будто я пытаюсь инициализировать сокет снова, он занят, но второй системный вызов, кажется, не происходит, поскольку файл журнала вообще не создается, поскольку файл журнала не создается.Если я вручную запускаю logfileControl из командной строки, он работает должным образом и создает лог-файл, который оставил меня в замешательстве ...

У кого-нибудь есть понимание того, что здесь происходит?

system("sudo /sbin/ip link set can0 up type can bitrate 500000"); 
                                  // This is ran initially as logging should start as soon as the pi is on
system("/home/pi/CAN/RCR_datalogging/candumpExternal can0 -l -s 0"); // candump with the option to log(-l) as well as 
                                  // continue to output to console (-s 0)

std::cout <<"Setup Complete" << std:: endl;

while(true) { //sleeping indefinitely so that the program can stay open and wait for button presses
    sleep(60);
}

Редактировать: я также пытался добавить простую 5-секундную паузу в начале программы, но это, похоже, не имело никакого значения.

...