nodejs / nodejs/node

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

Aperta
#21,941 15 commenti 3 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

child_process
Lingua principale
JavaScript
Stelle
122k
Fork
37.3k
Merge medio
4g 2h
PR unite (30g)
283

Descrizione

  • 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()
}

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia nel sottosistema child_process di Node.js e riproduci l'esempio fornito spawn('cat', ['/dev/stdin'], ...) su Linux, confrontandolo con l'esempio in Go. Il lavoro è completato quando il comportamento previsto di stdin su Unix è stato verificato e il problema segnalato è coperto da un test di regressione.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
javascript, linux, node.js
Ambito
backend, operating-systems
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
45/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.