2013-06-06 101 views
9

Tôi đang viết một kịch bản trình bao và tôi muốn lấy PID của một tiến trình có tên là "ABCD". Những gì tôi đã làm là:Nhận PID của quá trình trong Shell Script

process_id=`/bin/ps -fu $USER|grep "ABCD"|awk '{print $2}'` 

này được PID của hai quá trình ví dụ của quá trình ABCD và lệnh grep bản thân những gì nếu tôi không muốn nhận được PID của grep thực hiện và tôi muốn PID duy nhất của quá trình ABCD?

Vui lòng đề xuất.

Trả lời

28

Chỉ cần grep đi grep chính nó!

process_id=`/bin/ps -fu $USER| grep "ABCD" | grep -v "grep" | awk '{print $2}'` 
+0

Cám ơn nhanh Answer.It worked.Also những gì nếu tôi không muốn PID của kịch bản đó là thực hiện điều này. Bởi vì kịch bản của tôi cũng chứa ABCD –

+0

Chắc chắn bạn có thể nghĩ ra một thứ gì đó để "grep away" một lần nữa, như PID của tập lệnh của bạn, nên có sẵn thông qua biến '$$' – blue

+0

Cảm ơn @blue cho câu trả lời –

17

Bạn đã cố sử dụng pidof ABCD chưa?

+5

điều này thực sự là một câu trả lời tốt hơn cho hầu hết các trường hợp :) – blue

0

Bạn có thể sử dụng lệnh này để grep pid của một quá trình đặc biệt & echo $ b in pid của bất kỳ quá trình chạy

b = ps -ef | grep [f]irefox | awk '{ printf $2 }'

echo $ b

1

của nó rất thẳng về phía trước . ABCD phải được thay thế bằng tên quy trình của bạn.

#!/bin/bash 

processId=$(ps -ef | grep 'ABCD' | grep -v 'grep' | awk '{ printf $2 }') 
echo $processId 

Đôi khi bạn cần thay thế ABCD theo tên phần mềm. Ví dụ - nếu bạn chạy một chương trình java như java -jar TestJar.jar & thì bạn cần phải thay thế ABCD bởi TestJar.jar

+0

điều này làm việc cho tôi! –

1

ps có một tùy chọn cho điều đó:

process_id=`/bin/ps -C ABCD -o pid=`