Linux之for迴圈進程終止的方法__Linux

來源:互聯網
上載者:User

需求是這樣:

#。/usr/bin/bashday=0tmpday=0tmp2=0#for迴圈執行進程,省的一個個手動跑for((day=1;day<=59;day++))do    if [[ $day -lt 10 ]]; then    tmpday=2018010${day}    elif [[ $day -le 31 ]]; then    tmpday=201801${day}    elif [[ $day -lt 41 ]]; then    tmp2=`expr $day - 31`    tmpday=2018020${tmp2}    else    tmp2=`expr $day - 31`      tmpday=201802${tmp2}    fi    echo ${tmpday};    /usr/local/hadoop/bin/hadoop jar /home/workspace/xm-bin.jar   com.xm.hadoop.Main \-Drp.input.data1=/input/data1/${tmpday}-data1.txt \-Drp.input.data2=/input/data2/ \-Drp.output.path=/output/marathon/${tmpday}done

以上是一個shell指令碼的內容,名為123.sh,這個指令碼的目的是使用 Hadoop根據兩個輸入檔案計算出一個結果,由於希望跑59天,所以按照原來的想法是把這個指令碼跑59遍,每跑完一次改一下參數,後來瞭解到可以使用shell中的for迴圈,然後在for迴圈外面建立變數,此乃背景

問題是什麼呢
如果我跑完了一天發現原來寫的hadoop分析檔案(也就是xm-bin.jar)有問題,需要重跑,這個時候怎麼辦呢,最簡單粗暴的方法就是使用如下命令

hadoop job -kill job_123456789434_1234

但是如果for迴圈很多的話,比如100次,按照這個方法得執行100次這個命令,頭大

後來想到linux中殺進程的方法都是kill + 進程id

現在問題就轉變成如何擷取正在啟動並執行123.sh指令碼的進程id

ps -aux

進程太多,根本找不到

ps -aux|grep 123.sh 或者 ps -ef|grep 123.sh

後者可以查到父進程的id,不過執行kill 父進程id根本無效

即使加上訊號也沒用,就是下面這樣

kill -s 9 進程id

皇天不負苦心人,終於找到了答案,參考如何尋找SHELL的進程號,並殺死

具體步驟就是:

1、在123.sh中第一行添加如下代碼

echo "$$" > /tmp/xm_process.pid

這樣,該指令碼的id就會被寫到/tmp/xm_process.pid這個檔案中去

2、查看該進程id,並終止進程

[root@namenode xm]# cat /tmp/xm_process.pid23452[root@namenode xm]# kill 26398

3、123.sh指令碼雖然被kill了,但是已經在執行的hadoop作業卻依然在跑,如果該作業有很多job,那麼它就會跑完所有job才會停止,所以需要kill掉正在跑的job,這樣才會完全終止

hadoop job -kill job_123456789434_1234

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.