popen зависает и вызывает загрузку процессора до 100

0

У меня есть код, который использует popen для выполнения скрипта. Он работает нормально, но беспорядочно блокирует и получает процессор до 100%. После небольшого расследования я обнаружил, что он зависает при вызовах popen. Я поместил printf после всплывающего окна, указав дескриптор вписанный, и в этом случае, когда он блокирует этот printf, он никогда не отображается.

Что может вызвать блокировку popen?

Изменение: Код

FILE* pipe = popen(cpCommand, "r");
        printf(....               
        if (pipe)
        {
                while (!feof(pipe))
                {
                        if (DataReady(fileno(pipe),2500)>0)
                        {
                                if (fgets(output,sizeof(output),pipe) != NULL)
                                {

DataReady - это просто выбор. Я сделал strace после того, как он блокирует и, похоже, ничего не делает

  • 1
    Пожалуйста, покажите код.
  • 0
    Вы заканчиваете, \n что исключается из printf() после вызова popen() , не так ли?
Теги:

2 ответа

1

Не ответ ;-)

  1. Попробуйте использовать strace для того, что он делает, и какой syscall зависает.

  2. Выход Tterminal буферизируется по строке, поэтому убедитесь, что вы сбросили вывод с помощью fflush() или с помощью новой строки (fflush(stdout); или printf("Debug text\n");), чтобы убедиться, что он действительно не вызывает printf().

  3. Запустите сценарий вручную и убедитесь, что скрипт не зависает, прежде чем заподозрить popen().

0

Проверьте скрипт, вызванный popen() почему он не заканчивается.

Пока сценарий не заканчивается, popen() блокирует, скажет: не возвращается, как было замечено.


Я сильно сомневаюсь, что это проблема C.

  • 0
    Я знаю, но обычно это работает, через 1 или 2 дня, когда он блокируется, а также в этот момент скрипт работает отлично.
  • 1
    @ user2710449: Счастливая (скриптовая) отладка ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню