首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

无法作为c中的子进程输入到新控制台

这个问答内容涉及到操作系统和进程间通信的概念。

在C语言中,可以使用fork函数创建子进程,并使用exec函数族在子进程中执行其他程序。当子进程被创建后,它会继承父进程的文件描述符、控制台等属性。

"无法作为c中的子进程输入到新控制台"这句话意味着,如果子进程被创建后,想要将其输入输出重定向到一个新的控制台上是不可能的。这是因为控制台是与终端设备关联的,而子进程创建后默认继承了父进程的控制台。

然而,可以使用操作系统提供的机制进行进程间通信,从而实现子进程的输入输出重定向。常见的进程间通信方式包括管道、共享内存、消息队列等。具体使用哪种方式取决于应用场景的要求。

对于无法作为c中的子进程输入到新控制台的问题,可以使用以下步骤解决:

  1. 创建一个管道或其他进程间通信机制。
  2. 使用fork函数创建子进程。
  3. 在子进程中关闭标准输入(stdin)或标准输出(stdout)。
  4. 在子进程中将管道的读端或其他进程间通信机制与标准输入(stdin)或标准输出(stdout)进行绑定。
  5. 在父进程中关闭管道的读端或其他进程间通信机制。
  6. 在父进程中将管道的写端或其他进程间通信机制与标准输入(stdin)或标准输出(stdout)进行绑定。
  7. 父进程可以向管道或其他进程间通信机制写入数据,子进程可以从中读取数据,从而实现输入输出的重定向。

总结:

无法直接将子进程的输入输出重定向到一个新的控制台,但可以通过操作系统提供的进程间通信机制,如管道、共享内存、消息队列等,实现子进程的输入输出重定向。具体使用哪种进程间通信方式取决于应用场景的需求。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云计算产品:https://cloud.tencent.com/product
  • 腾讯云云原生产品:https://cloud.tencent.com/product/tke
  • 腾讯云数据库产品:https://cloud.tencent.com/product/cdb
  • 腾讯云服务器运维产品:https://cloud.tencent.com/product/cvm
  • 腾讯云音视频产品:https://cloud.tencent.com/product/vod
  • 腾讯云人工智能产品:https://cloud.tencent.com/product/ai
  • 腾讯云物联网产品:https://cloud.tencent.com/product/iot
  • 腾讯云移动开发产品:https://cloud.tencent.com/product/mss
  • 腾讯云存储产品:https://cloud.tencent.com/product/cos
  • 腾讯云区块链产品:https://cloud.tencent.com/product/bc
  • 腾讯云元宇宙产品:https://cloud.tencent.com/product/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【翻译】XV6-DRAFT as of September 3,2014 第0章 操作系统接口

进程退出之后,父进程wait也就返回了,于是父进程打印: parent:chlid 1234 is done 注意进程进程拥有不同内存空间与寄存器,因此在父进程改变某个变量值,并不影响进程该变量值...父进程shell调用wait,进程执行命令。例如,如果用户输入了echo hello ,runcmd(在8406行)将被调用并以echo hello作为参数,runcmd真正执行了命令。...下面的程序片段(实际上就是cat本质)从标准输入拷贝数据标准输出,如果遇到了错误,它会往标准错误输出错误消息。...文件描述符是一个强大抽象,因为它隐藏了它所指向文件细节:一个向文件描述符1写入数据进程,可能是写入文件,写入设备例如控制台,或者是写入管道。...管道右端可能也是一个带有管道命令(例如 a|b|c),它fork两个进程(一个b,一个c)。

60160
  • MIT 6.S081 (BOOK-RISCV-REV1)教材第一章内容 --- 操作系统接口

    例如,考虑下面用C语言编写程序片段 // fork()在父进程返回进程PID // 在进程返回0 int pid = fork(); if(pid > 0) { printf("parent...尽管最初进程与父进程有着相同内存内容,但是二者在运行拥有不同内存空间和寄存器: 在一个进程改变变量不会影响另一个进程。...例如:当wait返回值存入父进程变量pid时,并不会影响进程pid,进程pid仍然为0。 exec系统调用使用从文件系统存储文件所加载内存映像替换调用进程内存。...主循环使用getcmd函数从用户输入读取一行,然后调用fork创建一个shell进程副本。 父进程调用wait,进程执行命令。...管道右端可能是一个命令,该命令本身包含一个管道(例如,a | b | c),该管道本身fork为两个进程(一个用于b,一个用于c)。 因此,shell可以创建一个进程树。

    27520

    java开发操作系统:启动任意多控制台窗口

    控制台进程可以无限多时,我们原来用于存储进程数组和控制台图层窗口数组就没有用了,因此代码要做相应改动,在write_vga_desktop.c,去掉task_cons数组,换成一个执行控制台进程指针...当我们点击tab键时,要实现主进程和激活控制台进程切换,而且当有按键信息输入时,按键内容要传递给当前正在处于激活状态控制台进程,因此相关代码修改如下: void CMain(void) {...,需要为其分配代码段和内存段描述符,不同控制台启动用户进程,必须对应不同描述符,我们用当前进程段描述符减去第一个进程段描述符,然后分别加上21和30后得到结果作为代码段描述符和内存段描述符下标...,在控制台输入命令”exit”时,控制台能自我关闭,当控制台执行命令exit时,它会调用函数cmd_exit, 在该函数实现,它向主进程发送了一个特别的命令255,这个数值告诉主进程把当前激活控制台进程给关闭掉...函数,如果由控制台进程来调用close_constask的话,因为它自己把自己给休眠了,那么后面的代码就无法执行了,因此我们对主进程代码也做相应修改: else if(fifo8_status(&keyinfo

    91110

    【操作】Cobalt Strike 权限维持和团队服务器之间会话传递

    其效果等同于在 Beacon 控制台输入: shell sc create "WindowsUpdate2" binpath= "cmd /c start "C:\Windows 同样会上线一个 Beacon...使用 ppid 命令将 chrome.exe 设为父进程: 使用 chrome 64位进程作为临时进程用于派生会话: 注:使用 spawn命令来为监听器派生会话,spawn 命令接受两个参数...List 发现此会话进程的确是作为 chrome.exe 进程运行,但是将新派生会话 chrome.exe 进程失败了,而是开了一个默认 rundll32.exe。...其实这里一般是用 iexplore.exe x86 进程作为派生会话临时进程(使用 spawn x86 c:\program files (x86)\internet explorer\iexplore.exe...在团队服务器上开监听自身 reverse_http 监听器。 在旧团队服务器上,[Beacon] → spawn → 选择第二步监听器。 会话传递成功,可在团队服务器查看。

    1.4K20

    Linux系统下进程编程之进程状态和守护进程解析(五)

    这三个步骤可以说是环环相扣(同时在这个过程,我们要思考所需要知识,以及如何去索取知识,找到切入点)。...()会调用fork()产生子进程,由进程来调用/bin/sh-c string来执行参数comm字符串所代表命令。...(4)为了保证这一点,我们先调用fork()然后exit(),此时只有进程在运行 2、创建守护进程主要步骤: (1)进程等待父进程退出 (2)进程使用setsid函数创建会话期,脱离控制台...(6)将0、1、2三个文件描述符定位/dev/null(也就是把这个进程标准输入、标准输出和标准出错信息全部绑定/dev/null) 3、示例代码编写: 任何一个进程都可以将自己实现成守护进程...} // 执行这里就是进程 // setsid将当前进程设置为一个会话期session,目的就是让当前进程 // 脱离控制台

    89510

    java开发操作系统:不锁死控制台加载用户进程

    执行控制器转移到了用户进程代码,控制台自己代码无法得到执行,因而被锁死了。...从上图你或许能看出一些‘猫腻’,start 命令本质是启动一个控制台进程,然后把start 后面的字符传给控制台,然后再把‘回车’信息传给控制台,这就好像用户在控制台输入相应命令启动进程一样...fifo8_put把start 命令后面字符创每个字符对应键盘扫描码输入该队列,但是fifo8_put有个副作用,就是当队列受到信息输入时,如果该队列包含进程对象不为空,那么它一收到信息就会激活队列所包含进程对象...task_run(fifo->task, -1, 0); return 1; } } return 0; } 如果cmd_start在把信息输入控制台进程队列前...用ncst命令加载用户进程不会附带一个控制台窗口,那是因为我们在代码故意不绘制窗口,用户进程启动后,点击回车就可以把进程给结束掉,但有个问题是,当我们用鼠标点击窗体右上角X按钮时,无法正常关闭窗口

    75220

    PHP守护进程两种常见实现方式详解

    控制台还可以运行其他命令,这时我们还可以通过 fg 命令让进程恢复普通占用控制台模式。...首进程以及作为job提交进程(即用 & 符号提交进程) 2、session首进程退出时,该信号被发送到该session前台进程每一个进程 3、若父进程退出导致进程组成为孤儿进程组,且该进程组中有进程处于停止状态...[root@localhost php]# nohup php deadloop.php nohup: 忽略输入并把输出追加到"nohup.out" 并且nohup默认会把程序输出重定向当前目录下...chdir('/'); /* 通过上一步,我们创建了一个会话组长,进程组长,且脱离了终端,但是会话组长可以申请重新打开一个终端,为了避免 这种情况,我们再次创建一个进程,并退出当前进程,这样运行进程就不再是会话组长...】/seif ($pid > 0) { // 再一次退出父进程进程成为最终守护进程 exit(0); } // 由于守护进程用不到标准输入输出,关闭标准输入,输出,错误输出描述符 fclose(STDIN

    45110

    深入了解 Node 进程服务

    使用 shell 进行跨进程调用长久以来被认为是不稳定,这大概源于人们对控制台不友好交互体验恐惧(输入命令后,很可能长时间看不到一个输出,尽管后台可能在一直运算,但在用户看来和死机无异)。...; return 5; } 使用 gcc 编译该文件: gcc example.c -o example 生成名为example可执行文件,然后将这个可执行文件放到系统环境变量,然后打开控制台...cmd.exe 或者 bin/sh,然后在shell调用作为参数命令。...childProcess定义了如下事件。 Event:'close':进程输入输出流关闭时会触发该事件。...该进程无法通过kill方法关闭。 无法发送消息给进程。 Event:'error'事件无法保证一定会被触发,因为可能会遇到一些极端情况,例如服务器断电等。

    75020

    C++】STL 算法 - transform 变换算法 ( transform 函数原型 | 将 一个 或 两个 输入容器 元素 变换后 存储 输出容器 )

    文章目录 一、transform 算法 1、transform 算法简介 2、transform 算法函数原型 1 - 将 一个输入容器 元素 变换后 存储 输出容器 3、transform...1 - 将 一个输入容器 元素 变换后 存储 输出容器 transform 算法函数原型 : 下面的函数原型作用是 将 一个输入容器 元素 变换后 存储 输出容器 ; template...根据 输入元素 范围确定 , transform 会将 变换结果存储 输出容器 ; UnaryOperation unary_op 参数 : 一元函数对象 , 将输入容器 每个元素 输入该...transform 算法函数原型 2 - 将 两个输入容器 元素 变换后 存储 输出容器 transform 算法函数原型 : 下面的函数原型作用是 将 两个输入容器 元素 变换后 存储...binary_op: 二元函数对象 , 将输入容器1 和 输入容器 2 每个元素 输入该 二元函数对象 , 将计算结果 输出到 输出容器 ; 返回值解析 : 该 算法函数 返回 OutputIt

    47710

    第4阶段——制作根文件系统之分析init进程(2)

    inittab,以及运行inittab文件各个子进程 (4) 了解制作一个最小根文件系统需求 1.busybox简介 内核启动成功后,建立init进程并执行了第一个应用程序后,我们就可以输入ls...可以发现: 其中ls命令就位于ls.c文件,cp命令就位于cp.c文件,同样init进程就位于init.c文件 执行这些命令或者进程,最终调用它们自己文件xx_main()函数。...所以分析init进程就分析init.c文件init_main()函数 3分析busyboxinit进程 init_main() init进程:除了启动第一个应用程序(/linuxrc或者/sbin.../console已经设为标准输入输出了,如不设置就等于dev/null,则从控制台输入输出。...,只创建进程,而action=ASKFIRST时,需要一直等待用户回车才创建进程 4.通过前面的分析,制作一个最小根文件系统至少需要: (1)/dev/console(终端控制台, 提供标准输入

    1.4K90

    UNIX环境高级编程(APUE)之单实例守护进程

    \n", LOCK_FILE, strerror(errno) ); //下面这一行无法打印到控制台,项目上应该打印到日志文件 printf( "Cannot lock...\n", strerror(errno) ); //下面这一行无法打印到控制台,项目上应该打印到日志文件 printf( "Daemon process is already...3 创建第一个守护进程 如下图所示,程序先执行第178行main函数打印语句,输出当前第一个进程PID值为25872;然后由于在daemonize函数第一个进程(PID:25872)退出,所以它进程...)打开标准输入/输出/错误流,最后该进程成为由Linux系统init进程托管孤儿进程,没有终端terminal,这也就是守护进程。...这时使用cat /var/log/message命令查看进程在Linux系统日志文件打印内容,如下图所示: 很显然程序执行第160行,由于第一个守护进程对LOCK_FILE文件加锁缘故而无法获取该文件访问权限最终导致进程

    10410

    Node写毕设项目100人并发就撑不住,我是这样解决

    身为前端,我毫不犹豫选择 Node 作为系统后台——告别庞大 Java,全方位拥抱灵活 JS,我对项目前景充满信心。...我开启一次从 0 100 递增 PTS 并发压测,结果如下: 可见从 100 并发开始,就出现了无法忽略异常请求返回数量,5万请求860个异常,系统已经撑不住了,然后阅读生成测试报告,发现几乎所有异常都发生在一个接口.../const/childWorker.js"); // 进程监听父进程事件,根据message事件附带data对象type属性判断消息类型,如果是密码校验请求,则进行响应校验操作 process.on...其中,bindEvent 方法用于对子进程进行事件监听,定义在事件管理器文件 event-binder.js ,该文件主要提供两个功能:对子进程进行事件监听、暂存请求回调函数以便进程运算完成后调用...通过IPC进程间通信方式,将状态管理在主进程,主进程状态改变时,通过IPC通知进程更新状态,进程状态改变时,也通过IPC通知主进程同步。 小伙伴如有其他好方法,欢迎评论分享。

    94910

    pyinstaller打包成无控制台程序时运行出错(与popen冲突解决方法)

    有时候我们需要在程序里执行一些cmd命令,使用os或者其它模块popen方法去执行 这个问题一般是程序内有输入导致,这个输入可以是input(),也可以是其它一些stdin操作(如os.popen...实际上会造成输入请求) 本质上就是:使用-w参数(无控制台)打包时程序里不要请求输入 或者,你也可以不用-w参数,手动隐藏控制台!...如果是PIPE,则表示需要创建一个管道,如果是 None,不会做任何重定向工作,进程文件描述符会继承父进程。...另外,stderr值还可以是STDOUT,表示进程标准错误也输出到标准输出。 如果把preexec_fn设置为一个可调用对象(比如函数),就会在进程被执行前被调用。...现在回到我们将要解决问题 已知: 用pyinstaller-w参数打包导致python无法处理输入值(stdin) os.popen 打开管道却需要处理输入值(stdin) 所以,我们不使用os.popen

    3.8K30

    windows 多任务与进程

    多任务,进程与线程简单说明 多任务本质就是并行计算,它能够利用至少2处理器相互协调,同时计算同一个任务不同部分,从而提高求解速度,或者求解单机无法求解大规模问题。...参数安全描述符表示是创建进程安全描述符,与当前进程安全描述符无关。...,在控制台上做输入输出 ZeroMemory(&si, sizeof(STARTUPINFO)); ZeroMemory(&pi, sizeof(PROCESS_INFORMATION...为了区分子进程和父进程输入输出,一般通过标志CREATE_NEW_CONSOLE为新进程新建一个另外控制台。...下面是一个重定向例子: //启动控制台,做输入输出重定向文件 TCHAR szFilePath[MAX_PATH + 1] = _T(""); //指定文件对象可以被子进程所继承

    1.2K40

    xv6(19) SHELL交互程序

    $fork$ 会复制一份进程文件描述符表,所有进程都可以看作是 $init$ 进程进程,所以每个进程至少都有三个文件描述符,0、1、2,分别表示标准输入,标准输出,标准错误。...(parsecmd(buf)); //从字符串解析出命令,然后运行 wait(); //等待进程退出 这是 $shell$ $main$ 函数一部分,它 $fork$ 出一个进程运行控制台输入命令...= 0){ //fork出一个进程运行右边命令 close(0); //关闭标准输入 dup(p[0]); //标准输入重定向p[0...读进程 B** close(0); dup(p[0])**,这就把进程 $B$ 标准输入重定向管道读端。...另外这最后解决前文控制台输入输出一文遗留一个问题,为什么在控制台键入 Ctrl + D 会导致 shell 退出,从这里我们看出如果 getcmd 函数返回值小于 0 的话,那么 shell 就会执行

    37510

    进程监控工具supervisor 启动Mongodb

    第二,被管理进程作为supervisor进程,当进程挂掉时候,父进程可以准确获取进程挂掉信息,所以当然也就可以对挂掉进程进行自动重启了,当然重启还是不重启,也要看你配置文件里面有木有设置...Supervisor 也提供参数 "-c" 来指定配置文件目录路径。 在终端输入 "echo_supervisord_conf" 命令可查看 Supervisor 默认配置内容。...:8080 #IP和绑定端口 username = admin #管理员名称 password = 123456 #管理员密码 这样,在浏览器输入配置地址和端口号,输入配置好用户名和密码,便可以看到基于网页控制台界面...首先了解一下supervisor提供事件,supervisor通过进程对应用程序进行管理,监控程序同样作为一个进程运行,进程stdin、stdout、stderr都已经被重定向。...事件处理过程如下: 作为监听程序进程向stdout写入READY\n 事件发生时,supervisor会选择一个处于Ready状态进程stdin写入事件内容 该进程事件处理完毕后向stdout

    2.5K60
    领券