将linux进程与伪tty分离,但保持tty运行?

将linux进程与伪tty分离,但保持tty运行?,linux,debugging,terminal,gdb,Linux,Debugging,Terminal,Gdb,我想用两个xterm窗口调试控制台linux应用程序:一个用于gdb,另一个用于应用程序(例如mc) 我现在要做的是在第二个xterm窗口中运行“tty&&sleep 1024d”(这给了我它的伪tty名称),然后在gdb中运行“tty”,将程序重定向到另一个xterm窗口。但是,GDB警告说,它无法设置控制终端,某些次要功能不起作用(例如,处理窗口大小调整),因为“sleep 1024d”仍在该xterm窗口上运行 有没有更好的方法(而不是从shell启动进程并从gdb附加到它上)?我对相关b

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

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


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

我对相关bug中给出的程序进行了一些修改,将文件名存储在某个地方

下面是一个使用它的示例:

$xterm-e'./disownty~/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;
}
/*tty;行政长官不承认*/
#包括
#包括
#包括
#包括
#包括
#包括
静态空隙
结束(常量字符*msg)
{
佩罗尔(味精);
对于(;;)
暂停();
}
int
main(int argc,const char*argv[])
{
文件*tty_名称_文件;
const char*tty_文件名;

如果(argc fwiw)在程序中重新实现tty名称的原因是,xterm-e'tty | cat>tmp.tty&&disownty'最终调用bash,这会阻止我们否认tty。谢谢,我会尝试。有没有机会通过命令行stty而不单独编写程序来实现它?