고대 doshell(8)에 대한 정보는 어디서 찾을 수 있나요?

고대 doshell(8)에 대한 정보는 어디서 찾을 수 있나요?

"man openvt" 명령을 실행하여 openvt 매뉴얼을 확인한 결과 "See Also" 섹션에서 doshell(8)을 찾았습니다.

여기에 이미지 설명을 입력하세요.

그러나 "man 8 doshell"을 실행하면 매뉴얼이 없습니다.

여기에 이미지 설명을 입력하세요.

온라인 매뉴얼을 확인해보니http://linux.about.com/library/cmd/blcmdl1_openvt.htm, 이것다중 쉘(8)링크가 아님:

여기에 이미지 설명을 입력하세요.

나는 누군가가 "(고대 doshell(8)도 있습니다)"라고 언급한 것을 발견했습니다.https://stackoverflow.com/questions/21428158/how-to-send-broadcast-message-to-console-in-linux-from-c-program

여기에 이미지 설명을 입력하세요.

그냥 궁금해서 doshell(8)에 대한 정보를 찾을 수 있는 곳이 있나요?

답변1

잘 모르겠지만(오랜 시간이 지났습니다), 이것은 오래된 Linux 루틴(1992)에 대한 참조인 것 같습니다.ftp://ftp2.de.freebsd.org/pub/linux/tsx-11/sources/usr.bin/doshell.c:

#include <stdio.h>
#include <sys/file.h>
#include <errno.h>

extern char *sys_errlist[];

main(int argc, char *argv[])
{

    if (argc != 3) {
    fprintf(stderr, "usage: doshell <ttyname> <shellname> &\n");
    exit(1);
    }

    /* close down fd's */
    close(0);
    close(1);
    close(2);

    /* detach from parent process's group */
    setsid();

    /* open new tty */
    if (open(argv[1], O_RDWR, 0) == -1)
    exit(2);
    dup(0);
    dup(0);
    execlp(argv[2], "-", 0);
    /* should appear on new tty...: */
    fprintf(stderr, "can't exec shell: %s\n", sys_errlist[errno]);
    exit(3);
}

또한 이전 Linux 루틴을 참조할 수도 있습니다.http://users.sosdg.org/~qiyong/mxr/source/commands/mail/mail.c#L702

void doshell(command)
char *command;
{
  int waitstat, pid;
  char *shell;

  if (NULL == (shell = getenv("SHELL"))) shell = SHELL;

  if ((pid = fork()) < 0) {
        perror("mail: couldn't fork");
        return;
  } else if (pid != 0) {        /* parent */
        wait(&waitstat);
        return;
  }

  /* Child */
  setgid(getgid());
  setuid(getuid());
  umask(oldmask);

  execl(shell, shell, "-c", command, (char *) NULL);
  fprintf(stderr, "can't exec shell\n");
  exit(127);
} 

두 루틴 모두 stackoverflow 답변에 설명된 기능을 갖고 있는 것으로 보이며 첫 번째 루틴이 두 번째 루틴에서 시작된 것 같지 않습니다.

관련 정보