-
Жуйк, как сделать это из баша? #include <unistd.h> #include <sys/types.h> #include <sys/ioctl.h> int main (int argc, char **argv) { pid_t pid; /* * parent exits * child gets rid of its tty and then shift-runs its arguments */ pid = fork(); if (pid < 0) { return 1; } else if (pid == 0) { ioctl (0, TIOCNOTTY); execvp (argv[1], argv + 1); } else { return 0; } }
-
@mechmind, это я слегка прогнал. Правильная последовательность: open(fd, "/dev/tty", 0); ioctl(fd, TIOCNOTTY); close(fd); Она отцепляет процесс от эмулятора терминала — мелочь (SIGHUP через exec не пройдет все равно), а приятно. Правда, все равно придется потом закрыть 0, 1, 2, иначе все равно будет читать с/писать в эмулятор, с которого запустили. Но для моих целей (run gvim file.c из-под терминала в нужной директории) это вполне годится.