gpt4 book ai didi

linux - 从伪 tty 中分离一个 linux 进程,但保持 tty 运行?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:25:04 26 4
gpt4 key购买 nike

我想用 2 个 xterm 窗口调试控制台 linux 应用程序:一个窗口用于 gdb,另一个用于应用程序(例如 mc)。

我现在要做的是在第二个 xterm 窗口中运行“tty && sleep 1024d”(这给了我它的伪 tty 名称),然后在 gdb 中运行“tty”以将程序重定向到另一个 xterm 窗口。但是,GDB 警告它无法设置控制终端并且某些次要功能不起作用(例如处理窗口大小调整),因为“ sleep 1024d”仍在该 xterm 窗口上运行。

有没有更好的方法(而不是从 shell 启动进程并从 gdb 附加到它)?

最佳答案

我对相关错误中给出的程序进行了一些修改,以将文件名存储在某处 http://sourceware.org/bugzilla/show_bug.cgi?id=11403

这是一个使用它的例子:

$ xterm -e './disowntty ~/tty.tmp' & sleep 1 && gdb --tty $(cat ~/tty.tmp)/usr/bin/links

/* tty;exec disowntty  */
#include <sys/ioctl.h>
#include <unistd.h>
#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
#include <signal.h>
static void
end (const char *msg)
{
perror (msg);
for (;;)
pause ();
}
int
main (int argc, const char *argv[])
{
FILE *tty_name_file;
const char *tty_filename;

if (argc <= 1)
return 1;
else
tty_filename = argv[1];

void (*orig) (int signo);
setbuf (stdout, NULL);
orig = signal (SIGHUP, SIG_IGN);
if (orig != SIG_DFL)
end ("signal (SIGHUP)");
/* Verify we are the sole owner of the tty. */
if (ioctl (STDIN_FILENO, TIOCSCTTY, 0) != 0)
end ("TIOCSCTTY");
printf("%s %s\n", tty_filename, ttyname(STDIN_FILENO));
tty_name_file = fopen(tty_filename, "w");
fprintf(tty_name_file, "%s\n", ttyname(STDIN_FILENO));
fclose(tty_name_file);

/* Disown the tty. */
if (ioctl (STDIN_FILENO, TIOCNOTTY) != 0)
end ("TIOCNOTTY");
end ("OK, disowned");

return 1;
}

关于linux - 从伪 tty 中分离一个 linux 进程,但保持 tty 运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14258478/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com