У меня есть программа, которая работает бесконечно. В целях тестирования я сделал программу-оболочку, которая убивает другую через определенное время (указанное через аргументы командной строки/терминала). Разветвляемая программа требует, чтобы ей были переданы две папки с одинаковыми именами (у меня нет контроля над этим), поэтому я просто дважды передаю ей один и тот же аргумент, как показано здесь:
pid_t pid = fork();
if(pid == 0)
{
//build the execution string
char* test[2];
test[0] = argv[2];
test[1] = argv[2];
test[2] = NULL;
cout << "test[0] is " << test[0] << endl;
cout << "test[1] is " << test[1] << endl;
cout << "argv[1] is " << argv[1] << endl;
execvp(argv[1],test);
}
Проблема в том, что программа, передаваемая в argv[1], продолжает сбой сегментации. Если я вызываю сам через терминал, он работает без проблем. Я передаю одну и ту же папку в обоих случаях. Может ли кто-нибудь сказать мне, почему он не работает для execvp?
Я должен упомянуть, что коллега также запускал его на своем компьютере, и в первый раз он будет работать нормально, но каждый раз после этого он будет ошибаться.
изменить: я добавил нулевой термин для проверки, однако это не устранило проблему.
Форма команды точно такая:
<executable> <wrapped prog> <folder> <duration>
В относительных путях это:
Intel/debug/Tester.exe <program> test 10
test
должен начинаться с имени исполняемого файла и заканчиваться NULL. - person PSkocik   schedule 27.07.2015strace -f
, чтобы понять, что происходит - person Basile Starynkevitch   schedule 27.07.2015exit()
и, желательно, также сообщение об ошибке, напечатанное послеexecvp()
. Он возвращается только в случае сбоя, но вы не хотите, чтобы ребенок продолжал делать другие вещи в случае сбоя. - person Jonathan Leffler   schedule 28.07.2015