我正在尝试使用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);
这可能是什么原因?我错过了什么?
答案 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()
只需要信号参数(如根据文件的字符串)。
这是有道理的,因为子进程已经知道它的pid(使用subprocess.pid
时获得的pid),因此您不需要再次提供它。
要终止您的过程,您可以将有效信号传递给.kill()
方法:
ls.kill('SIGTERM');
或者,您也可以简单地调用子进程的.kill()
方法而不需要任何参数,这相当于使用&#39; SIGTERM&#39;来调用它。信号。
ls.kill()