¿Cómo generar un proceso de nieto para un proceso hijo?

He generado un proceso hijo, a continuación es el código:

const spawn = require('child_process').spawn; const ls = spawn('ls', ['-lh', '/usr'], { detached: true }); ls.stdout.on('data', (data) => { console.log(`stdout: ${data}`); fs.writeFileSync('path-to-test.txt', 'stdout'); }); ls.stderr.on('data', (data) => { console.log(`stderr: ${data}`); fs.writeFileSync('path-to-test.txt', 'stderr'); }); ls.on('close', (code) => { console.log(`child process exited with code ${code}`); }); 

Con la opción detached: true , mantendrá el proceso hijo ejecutándose incluso si el proceso padre se detiene.

Mi pregunta es: ¿cómo ejecutar un proceso de nieto en este proceso hijo? Porque en mi senario, después de generar este proceso hijo, se eliminará el proceso padre. Por lo tanto, no puedo generar otro proceso, excepto usar el proceso hijo existente para generar un proceso de nieto.

Primero, es importante tener en cuenta que la opción separada solo mantiene vivo al niño después de que el padre muere en un sistema Windows. En los sistemas Unix, el niño permanecerá vivo por defecto.

Para generar un “proceso de nieto”, child_program.js tendría que generar un proceso secundario. Pruebe este ejemplo para ver. Supongamos que tienes app.js que contiene lo siguiente:

 const spawn = require('child_process').spawn; const child = spawn(process.argv[0], [__dirname + '/child_program.js'], { detached: true, stdio: 'ignore' }); child.unref(); 

Y luego supongamos que child_program.js contiene lo siguiente:

 const spawn = require('child_process').spawn; const child = spawn(process.argv[0], [__dirname + '/grandchild_program.js'], { detached: true, stdio: 'ignore' }); child.unref(); 

Y, por último, digamos que grandchild_program.js hace esto:

 var fs = require('fs'); fs.writeFileSync(__dirname + '/bob.txt', 'bob was here', 'utf-8'); 

Cree estos archivos, colóquelos en el mismo directorio, ejecute node app.js y luego debería ver que bob.txt aparece en ese mismo directorio. Hazme saber si tienes alguna pregunta. Mi pregunta para usted sería si sabe qué process.argv[0] y por qué está generando nuevos procesos secundarios con ese argumento.