Одно из моих приложений на c ++ зависнет после запуска в течение неопределенного периода времени, поскольку оно не завершено, поэтому его нельзя перезапустить родительским процессом.
Известно, что SIGTTIN может предотвратить приостановку программы с помощью nohup
или с помощью </dev/null
для перенаправления стандартного ввода, но это принципиально не решает проблему.
Итак, кто-нибудь знает, как отладить или определить местоположение кода, генерирующего сигнал SIGTTIN?
// this is a example, exec command to get SIGTTIN: ./a.out &
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
int main(int argc, char* argv[]) {
int len;
char buf[64];
while(1) {
len = read(STDIN_FILENO, buf, 64);
if (len > 0) {
write(STDOUT_FILENO, buf, len);
}
else {
perror("read");
}
}
return 0;
}