2017-08-01 101 views
2

我是所有Linux系統的初學者,所以請慢一點。在沒有PID的情況下在後臺運行一個while循環

我創建了一個「腳本」這是在後臺運行:

while true; do echo "I'm alive" >> alive.log ; done & 

腳本的輸出保存在一個文件alive.log這是存在於用戶的主目錄。 問題是我沒有ideea如何殺死循環,因爲它是填充我的磁盤空間,如果我想刪除文件,然後循環將創建一個新文件,並填充文本「我活着」,因爲我已經要求它這樣做。

我試着使用:

ps - aux | grep while 

ps - aux | grep alive 

兩個線路輸出會給我我需要的PID,但問題是,腳本是一個循環,這意味着PID每次運行時都會改變(遞歸),所以我不能使用PID來終止進程。

我也嘗試使用:

pkill while 
killall while 

結果爲兩條線是0(輸出可使用pkill的時可以看到而-c「0」或killall而:「而:沒有發現過程」;

有什麼建議嗎?

+3

輸入'fg'將它放在前臺並用ctrl-c將其殺死。 –

+2

...或者殺死%1。查找'help kill' – hek2mgl

+2

輸入'jobs',找到你的腳本(例如'[1] + Running ...'),然後用'kill%1'殺死它(或者任何數字在'[]'中)。 – randomir

回答

0

我寫的句子,其中一個名爲while.sh一個腳本文件,並通過外殼運行它:

[[email protected] workspace]$ ./while.sh 
[[email protected] workspace]$ 

沒有PID。 我用top命令工具來搜索我的while.sh,它告訴我:

PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND                 
4036 edemon 20 0 5268 756 436 R 97.3 0.0 0:07.93 bash                  
2469 root  20 0 94412 29m 10m S 7.8 2.0 1:49.19 Xorg                  
2788 edemon 20 0 74300 12m 10m S 1.9 0.9 1:38.79 nm-applet                
4040 edemon 20 0 2708 1072 796 R 1.9 0.1 0:00.01 top 

的,而父親工藝慶典,所以我殺了4036 alive.log的大小沒有成長的空間。

0

,我決定嘗試一下你的「腳本」的背景。當我運行

while true; do echo "I'm alive" >> alive.log ; done & 

它將進程標識返回到標準輸出,從而顯示進程正在後臺運行。你可以殺死這個進程ID:

kill <pid> 
+0

謝謝!如果你想請我的帖子upvote,這將不勝感激。我還要感謝Ulysse BN讓代碼更具可讀性。 – ssharma

0

試圖重新啓動兩次,第一次沒有工作,但之後的第二循環中不再出現和文件不被改寫。

另外,我擺脫了它後,我重新進入腳本:

while true; do echo "I'm alive" >> alive.log ; done & 

由於進入腳本的輸出是PID時作上述表示的@ssharma,哪怕循環不斷變化的PID我能用該PID殺死循環。

感謝您的幫助!

0

如果運行該腳本它會顯示爲bash如果你命令ps -ef

UID  PID PPID C STIME TTY   TIME CMD 
james 27262 2448 98 17:35 pts/3 00:00:12 bash 
james  2448 2446 0 Jul19 pts/3 00:04:49 bash 

(如果您正在使用bash)及其母公司PID指向bash過程中以及(PID 27262是你的緊上面的小回路)。因此,找到所有bash進程作爲父進程的一個bash進程。這可以工作:

$ awk '/^james/ && $NF=="bash" && NR==FNR{a[$2];next} /^james/ && $NF=="bash" && $3 in a{print $2}' <(ps -ef) <(ps -ef) 
27262 
27359 

因此,這些都是很好的候選人殺人。在這種情況下,另一個是ps -ef,另一個是標記。

1

這是@James Brown在評論中的回答。

類型fg得到它在前景和殺死它與ctrl-c解決這個最快的方法。

相關問題