如果我有一個從 node.js 運行的子行程
const k = cp.spawn('bash');
k.stdin.end(`do long process`);
k.stdout.pipe(process.stdout);
k.stderr.pipe(process.stderr);
我最近了解到,使用ctrl z 可以完全停止/暫停一個行程,然后通過鍵入重新啟動它fg。
我認為同樣的事情可以通過使用這些信號來完成:
`kill -STOP ${k.pid}`
`kill -CONT ${k.pid}`
如何將這些信號發送到子行程,以停止/重新啟動子行程?
uj5u.com熱心網友回復:
好吧,我在這里有點過頭了,這很好地解決了問題,使用k.kill('SIGSTOP')and k.kill('SIGCONT'):
#!/usr/bin/env node
const cp = require('child_process');
const k = cp.spawn('bash');
k.stdin.end(`
var=0;
while true; do
var=$((var 1))
echo "count: $var"
sleep 0.01
done;
`);
k.stdout.pipe(process.stdout);
k.stderr.pipe(process.stderr);
const pauseAndRestart = () => {
setTimeout(() => {
k.kill('SIGSTOP');
setTimeout(() => {
k.kill('SIGCONT');
pauseAndRestart();
},2000);
}, 2000);
};
pauseAndRestart();
該腳本將一遍又一遍地暫停并重新啟動子行程。(僅在 MacOS 上測驗過)。我不確定暫停行程的后果以及它與 Windows 或 Linux 有何不同。那里的任何見解表示贊賞。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/537564.html
