我尝试杀死进程时出现未知信号错误

时间:2018-01-17 12:32:08

标签: node.js shell spawn

我正在尝试使用kill中的child_process方法杀死进程。但是当我尝试调用函数时出现以下错误:

TypeError [ERR_UNKNOWN_SIGNAL]: Unknown signal: 18408

我的做法如下:

    const ls = spawn('node',['print']);

    ls.stdout.on('data', (data) => {
    console.log(`stdout: ${data}`);
    });

    ls.stderr.on('data', (data) => {
    console.log(`stderr: ${data}`);
    });

    ls.on('close', (code) => {
    console.log(`child process exited with code ${code}`);
    });


    setTimeout(() => {
            ls.kill(ls.pid);
    },4000);

这可能是什么原因?我错过了什么?

2 个答案:

答案 0 :(得分:1)

public class MainActivity extends AppCompatActivity { private LinearLayout linearLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); linearLayout=findViewById(R.id.ll); int width=getScreenWidth(Main2Activity.this); int childCount=linearLayout.getChildCount(); for (int i=0;i<childCount;i++){ Button button= (Button) linearLayout.getChildAt(i); button.setWidth(width); } } public static int getScreenWidth(Context context) { WindowManager windowManager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); windowManager.getDefaultDisplay().getMetrics(dm); return dm.widthPixels; } } 发送一个Unix信号。这些用数字表示。您应该将信号的数量传递给kill(),而不是PID。

尝试

kill()

那可能会打印import signal print(signal.SIGTERM) ,这是信号TERM的编号(通常会终止它发送到的进程)。

在您的计划中,您可以致电

15

答案 1 :(得分:1)

实际上,与Linux kill()命令不同,后者将进程pid取消并将信号作为参数,Nodejs ChildProcess subprocess.kill()只需要信号参数(如根据文件的字符串)。

subprocess.kill([signal])

这是有道理的,因为子进程已经知道它的pid(使用subprocess.pid时获得的pid),因此您不需要再次提供它。

要终止您的过程,您可以将有效信号传递给.kill()方法:

ls.kill('SIGTERM');

或者,您也可以简单地调用子进程的.kill()方法而不需要任何参数,这相当于使用&#39; SIGTERM&#39;来调用它。信号。

ls.kill()