nodejs / nodejs/node

Processes created using spawn with a pipe have no /dev/stdin

オープン
#21,941 コメント 15 件 リアクション 3 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

child_process
主要言語
JavaScript
スター
122k
フォーク
37.3k
平均マージ
4日 2時間
マージ済み PR(30日)
283

説明

  • Version: v8.9.4
  • Platform: Linux 4.9.0-6-amd64 #1 SMP Debian 4.9.82-1+deb9u3 (2018-03-02) x86_64 GNU/Linux
  • Subsystem: child_process

The code below fails with cat: /dev/stdin: No such device or address.

const {spawn} = require('child_process');
const proc = spawn('cat', ['/dev/stdin'], {stdio: ['pipe', process.stdout, process.stderr]});

Apparently Node spawns sub processes in a way that there is no /dev/stdin allocated.

I think this is a NodeJS bug - on UNIX, a sub process should be able to open /dev/stdin if there is a stdin for it. The following Go program for example works perfectly fine:

func main() {
	cmd := exec.Command("cat", "/dev/stdin")
	cmd.Stderr = os.Stderr
	cmd.Stdout = os.Stdout

	stdin, _ := cmd.StdinPipe()
	go func() {
		stdin.Write([]byte("hello cat!\n"))
		stdin.Close()
	}()

	cmd.Run()
}

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

Node.js の child_process サブシステムから始め、Linux 上で提示された spawn('cat', ['/dev/stdin'], ...) の例を再現し、Go の例と比較してください。期待される Unix の stdin の動作が確認され、報告された失敗が回帰テストでカバーされれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
javascript, linux, node.js
領域
backend, operating-systems
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
45/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。