VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1787|回复: 2

O_NOCTTY 禁止取得終端控制 無效?

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-19 15:00:01 | 显示全部楼层 |阅读模式
小弟在 LINUX 上寫了程序 , 依照<unix高級環境編程> 一書所說 ,
會話組長(session leader) 若不指明 O_NOCTTY 則打開終端設備會取得控制終端 ;
反之 , 若指明則就不取得控制終端.

但是程序上指明了依然無效還是取得控制終端 , 因為我額外寫了
用子程序開啟果然非會話組長無法取得控制終端 , 打開 tty12 時 ,
顯示 "no job control in the Shell" , 表示控制終端取得失敗 ,
為何 O_NOCTTY 對會話組長無效 ?

代碼如下:
#include<sys/stat.h>
#include<unistd.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdlib.h>
int main()
{
    pid_t pid=fork();
    if(pid>0)
    exit(0);
    if(pid<0)
    printf("first fork error\n"),exit(1);
    if(setsid()<0)
    printf("sedsid() error\n"),exit(1);

     
    umask(022);
    close(0);
    close(1);
    close(2);
     
    int _new=open("/dev/tty12",O_RDWR|O_NOCTTY);

     dup2(_new,0); //重新指向 stdin
     dup2(_new,1); //重新指向 stdout
     dup2(_new,2); //重新指向 stderr
    execl("/bin/bash","bash",(char*)0);
   
}
回复

使用道具 举报

0

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-30 13:30:01 | 显示全部楼层
bash会重新取得会话终端的
回复

使用道具 举报

0

主题

1

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2021-7-7 09:33:08 | 显示全部楼层
解决了吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表