如何獲取在tty2中啓動的進程的tty1中的pid?bash lsof:從一個tty獲取pid到另一個tty2
上下文:
試圖編寫一個bash單行程序來殺死一個進程生成一個文件,當這個文件超過預先定義的最大大小。 (單線程還沒有運行,因爲它需要將其嵌入到循環中)。
在測試過程中,問題是lsof不會在終端tty1返回任何PID,儘管pid存在於運行該命令的tty2中。
tty1上:生成所述文件和監測改變
MAX_SIZE_Ko=10001;file=test_lsof;dd if=/dev/zero of=$file bs=1k count=800;inotifywait $file;SIZE_Ko=$(du -s $file | cut -f1); [[ "$SIZE_Ko" -gt "$MAX_SIZE" ]] && (PID=$(lsof $file | tail -n1 | awk -F" " '{ print $2 }') ; [[ ! -z $PID ]] && kill -9 $PID || echo "no running PID modifying $file")
TTY2:增加的文件大小
for ((1; 1; 1));do echo -e "foobar\n" >> test_lsof; echo $((i++))" - pid="$$; done
您是否擁有對tty2流程的控制權?如果是這樣,我認爲用第一個進程可檢索的方式保存進程PID會更好,例如將其寫入'test_lsof.pid'。 – 2012-02-29 19:20:59