2017-10-18 99 views
1

我有一個程序(在本例中爲node.js進程)正在運行的很多進程。有時我需要運行幾個(例如10個nodejs進程),我用Makefile啓動它們。我希望能夠在我的Makefile中使用一些bash命令在需要時關閉這10個進程,但是我不想殺死其他運行進程的node.js。所以我可以使用pkill node,但它會殺死每個節點進程,我怎麼能給這個10進程一些名稱或者一些變量,殺死它們只有kill -9或者pkill?給變量或名稱進程來殺死這個實例的每個進程,但只有給定的名稱(變量)?

回答

1

您可以將您的子進程的PID的文件,然後用它來殺死他們。例如與sleep子進程:

$ cat Makefile 
all: start-1 start-2 start-3 

start-%: 
    sleep 100 & echo "$$!" >> pids.txt 

kill: 
    kill -9 $$(cat pids.txt); rm -f pids.txt 
$ make 
sleep 100 & echo "$!" >> pids.txt 
sleep 100 & echo "$!" >> pids.txt 
sleep 100 & echo "$!" >> pids.txt 
$ ps 
    PID TTY   TIME CMD 
30331 ttys000 0:00.49 -bash 
49812 ttys000 0:00.00 sleep 100 
49814 ttys000 0:00.00 sleep 100 
49816 ttys000 0:00.00 sleep 100 
$ make kill 
kill -9 $(cat pids.txt); rm -f pids.txt 
$ ps 
    PID TTY   TIME CMD 
30331 ttys000 0:00.50 -bash 

注:如果您使用並行make你要注意一試身手pids.txt訪問條件。