无法通过 /proc/ 传递参数/fd/0

无法通过 /proc/ 传递参数/fd/0

我已经编写了一个基本的 C++ 程序,如下所示:

#include <sstream>
#include <unistd.h>
#include <cstdio>
#include <iostream>

int main(void)
{
  int foo;
  std::cin >> foo;
  FILE* fd = fopen("./output", "a+");
  std::stringstream ss;
  ss << getpid() << std::endl;
  fputs(ss.str().c_str(), fd);
}

该代码只是期望来自标准输入的输入,并将其进程 ID 附加到输出文件。成功编译后,我将二进制文件作为后台进程执行./my_binary&,使用 检查其 pid jobs -l,并尝试使用 或 向其传递一个虚拟printf "6\0" >/proc/<pid>/fd/0整数echo -e "6\n" >/proc/<pid>/fd/0。该进程不会按照我的预期写入输出文件并退出。我在这里做错了什么?我可以0在进程的 proc 目录中看到描述符,但是当进程在后台抛出时,它是否会以某种方式被阻止?

请注意,相比之下,我可以通过fg <n>ing 并手动输入整数来展示预期的行为。

编辑:根据 Kusalananda 的评论,我意识到正在为SIGTTIN在等待来自 tty 的输入时处于后台的进程发出信号。

编辑:由于未能找到缓解问题的方法SIGTTINT,我决定使用命名管道而不是stdin.代码已更改(我也切换到 C,意识到我最终还是使用了纯 C):

#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

int main(void)
{
  char input[3]; 
  read(7, input, 2);
  int num = atoi(input);
  char output[256];
  memset(output, 0, 256);
  sprintf(output, "%d : %d\n", getpid(), num);
  write(13, output, strlen(output));

  return 0;
}

我创建了一个管道:mkfifo input_pipe,并将该过程称为./process 7<input_pipe 13>>output,将参数传递到input_pipe

相关内容