PS ප්‍රති results ලවල 'grep' පෙන්වීම වළක්වා ගන්නේ කෙසේද?


326

නොපවතින යම් ක්‍රියාවලියක් සඳහා මා සෙවූ විට, උදා

$ ps aux | grep fnord                          
wayne    15745  0.0  0.0  13580   928 pts/6    S+   03:58   0:00 grep fnord

නිසැකවම මම grep ගැන තැකීමක් නොකරමි - එය psක්‍රියාවලිය සෙවීම තරම්ම අර්ථවත් කරයි !

ප්‍රති g ල වල grep පෙන්වීම වළක්වා ගන්නේ කෙසේද?


30
ඔබට අවශ්‍ය වන්නේ ක්‍රියාවලියක PID පමණි, ඔබට (හෝ ) ps aux |grepසමඟ ප්‍රතිස්ථාපනය කළ හැකිය . pgreppgrep -f
jofel

6
මත එම ප්රශ්නය Serverfault හා සුපිරි පරිශීලක .
Thor

එම ප්‍රතිදානය නීත්‍යානුකූලද? එය fnord ධාවන නම් වැඩපිළිවෙළක් නොමැති බව පෙනේ ...
හෙංචයියකු

4
ocacolyte, එය හරියටම එයයි - නමුත් එය ප්‍රතිදානය grep වෙතට නල කරන නිසා, grep ක්‍රියාත්මක වේ (ප්‍රතිදානය සඳහා බලා ps auxසිටිමි, මම බලාපොරොත්තු වෙමි). ඒ නිසා වැළැක්වීම සඳහා ආකාරය ප්රශ්නය වන්නේ, grep fnordපැහැදිලිවම මම කැමති නෑ නිසා ධාවනය ක්රියාවලියක් ලෙස දක්වා පෙන්වමින් සිට බව එක්.
වේන් වර්නර්

2
@acolyte ඔබට "fnord" රේඛාව නොපෙනීම පුදුමයක් නොවේ. ඔබට එය දැකිය නොහැකි විය යුතුය. ඔබට ඉතිරි වීමට මිනිත්තු 2 ක් හෝ 3 ක් තිබේ නම්, එය සොයන්න.
ෆ්‍රැන්චෙස්කෝ

Answers:


467

යතුරුපුවරුවේ විසඳුමක් ඇති බව හැරෙනවා .

$ ps aux | grep "[f]nord"

අකුර වටා වරහන් තැබීමෙන් සහ නූල වටා උපුටා දැක්වීම් කිරීමෙන් ඔබ රීජෙක්ස් සොයනු ඇත, එහි සඳහන් වන්නේ "එෆ්" අක්‍ෂරය පසුව 'නෝඩ්' සොයා ගන්න. "

නමුත් ඔබ වරහන් 'f' රටාවට දැමූ බැවින් දැන් ']' අනුගමනය කර grepඇති බැවින් ප්‍රති results ල ලැයිස්තුවේ නොපෙන්වයි. නීටෝ!


27
ocacolyte: ps වෙතින් ලැබෙන ප්‍රතිදානයට අවසන් වන රේඛාවක් ඇතුළත් වේ grep [f]nord. කෙසේ වෙතත්, එම රේඛාව grep ෆිල්ටරය හරහා [f]nordනොගැලපේ , මන්ද යත්, නූල් සාමාන්‍ය ප්‍රකාශනයට නොගැලපේ [f]nord.
LarsH

9
ArLarsH රසවත්, ස්තූතියි! මම යෝජනා කර තිබුනා ps aux | grep fnord | grep -v grep... එය දැනටමත් කිහිප දෙනෙකු විසින් යෝජනා කර ඇති බවක් පෙනේ ... lol
acolyte

5
ro ප්‍රෝගෝ ඔව්, ඔබට [ඉරට්ටේ පවා උපුටා දැක්විය යුතුය . fnordවත්මන් නාමාවලියෙහි ඇති ගොනුවක් සමඟ එය උත්සාහ කරන්න .
ගිලෙස්ගේ SO- නපුරු වීම නවත්වන්න '

26
ප්‍රතිදානය ග්‍රහණය කර psගැනීම පැරණි උපක්‍රමයක් විය හැකි නමුත් එය විශ්වාස කළ නොහැකි ය. තිබේ නම් භාවිතා කරන්නpgrep .
ගිලෙස්ගේ SO- නපුරු වීම නවත්වන්න '

9
@naxa ඔබට ක්‍රමලේඛ ඇමතුමක් fnordසහ වැඩසටහනක් ඇතැයි සිතන්න safnorde. නැතහොත් පරිශීලකයෙකු කැඳවා ඇති අතර bfnord, ඔබ ඔහුගේ සියලු ක්‍රියාදාමයන් විනාශ කරයි. ආදිය
ගිලෙස්ගේ SO- නපුරු වීම නවත්වන්න '

173

මම භාවිතා කරන තවත් විකල්පයක් (විශේෂයෙන් ක්‍රියාවලියක් ක්‍රියාත්මක වේදැයි බැලීමට) pgrep විධානයයි. මෙය ගැලපෙන ක්‍රියාවලියක් සොයනු ඇත, නමුත් සෙවීම සඳහා grep රේඛාවක් ලැයිස්තුගත නොකරයි. මම එයට කැමතියි එය කිසිවක් සෙවීමකින් හෝ ගැලවීමකින් තොරව ඉක්මන් සෙවීමේ ක්‍රමයක් වන නිසා.

pgrep fnord

10
ඔවුන්ට -fවිකල්පය වඩාත් සමාන වීමට අවශ්‍ය වනු ඇත ps | grep.
ජෝර්දාන්

1
ord ජෝර්දාන් ඇත්ත වශයෙන්ම, pgrep -fවඩා සමාන වනු ඇත ps -f | grep.
michelpm

5
-lගැලපෙන විධානය පෙන්වීමට එය තර්කයක් ද ඇත .
පැට්රික්

16
ps | grep '[f]nord'දක්ෂ හා ගෞරවනීය, නමුත් pgrep හරි .
කොජිරෝ

3
ps $(pgrep cmd) ...`Pgrep හි විකල්ප නොමැති නම් ඔබට සැමවිටම කළ හැකිය (එය හිස් විධාන කට්ටලයක් සඳහා වුවද ක්‍රියා නොකරනු ඇත).
මැකීජ් පීචොට්කා

65

පරිපූර්ණ විසඳුම බ්‍රිගු විසින් ඉදිරිපත් කරන ලද විසඳුමයි

pgrep fnord 

නමුත් ඔබට එය කිරීමට අවශ්‍ය නැතිනම්, ඔබට grep සමඟ ගැලපෙන සියලුම රේඛා බැහැර කළ හැකිය :

ps aux | grep -v grep | grep "fnord"

7
නමුත් මා සොයන රේඛාව "bash bash grep bash" නම් කුමක් කළ යුතුද?
ස්පාර්

1
@Sparr එවිට ඔබ හොඳම විසඳුම භාවිතා කළ යුතුය: pgrepනැතහොත් වෙනත් එකක් සොයා ගන්න;)
RSFalcon7

Pgrep සමඟ නම දිග සීමාව ගැන විමසිල්ලෙන් සිටින්න. සම්පූර්ණ මාර්ග නාමය ලබා ගැනීමට -f භාවිතා කරන්න හෝ ඔබේ නම් දිගු නම් වලින් අසමත් වන බව ඔබට පෙනී යනු ඇත. -l තරඟ ලැයිස්තු ගත කිරීමත් හොඳයි
නීල් මැක්ගිල්


27

වඩාත්ම අලංකාර විසඳුම නොව ඔබට මෙය කළ හැකිය:

$ ps aux | grep fnord | grep -v grep


එය නරක පිළිතුරකි! මන්ද grepඔබේ වාක්‍ය ඛණ්ඩයේ වචනයක් තිබුනේ නම් . එය එම ක්‍රියාවලිය නොපෙන්වයි. උදාහරණයක් ලෙස, විධානය මඟින් ගොනුවක් foo_grep_bar.txtසංස්කරණය කරනු ලැබේ යැයි සිතමු nano. එබැවින් ක්‍රියාවලියක් ක්‍රියාත්මක වේ: root 14908 0.0 0.0 110012 1692 pts / 3 S + Oct31 0:00 nano foo_grep_bar.txtමෙම පිළිතුරට අනුව මෙය ක්‍රියා නොකරනු ඇත: $ ps aux | grep nano | grep -v grepමන්ද ඔබේ ගොනු නාමයේ grep වචනයක් ඇති බැවිනි.
නබි කේඒඑස්

පිළිගත් පිළිතුරට වඩා එහි අභිප්‍රාය පිළිබඳ වඩාත් පැහැදිළිවම මම මෙය කැමැත්තෙමි.
සමස්පින්

1
අනුව superuser.com/a/409658/450260 ඔබ සම්පූර්ණ හැර කළ යුතු grep fnordපමණක් නොව grepඑනම් $ ps aux | grep fnord | grep -v "grep fnord"
ඩාවොස්


16

Zsh හි , grep fnord =(ps aux).

අදහස නම්, පළමුව ධාවනය කරන්න ps aux, ප්‍රති result ලය ගොනුවකට දමන්න, ඉන්පසු grepඑම ගොනුවේ භාවිතා කරන්න. අපි zsh හි "ක්‍රියාවලි ආදේශනය" භාවිතා කරන බැවින් අපට ගොනුවක් නොමැත.

නිදර්ශනය කිරීමට, උත්සාහ කරන්න

ps aux > ps.txt
grep fnord ps.txt
rm ps.txt

ප්රති result ලය සමාන විය යුතුය.

තවත් සමහර පිළිතුරු සඳහා සාමාන්‍ය අදහස් දැක්වීම . සමහර ඒවා සංකීර්ණ හා / හෝ ටයිප් කිරීමට දිගු වේ. එය නිවැරදි වීම පිළිබඳ කාරණයක් පමණක් නොව, එය ද භාවිතයට ගත හැකි ය. නමුත් එයින් අදහස් කරන්නේ එම විසඳුම් සමහරක් නරක බවයි; ඒවා භාවිතයට ගත හැකි වන පරිදි කුඩා UI තුළ ඔතා තිබිය යුතුය.


1
Zsh හි ක්‍රියාවලි ආදේශනය නොදැන, නමුත් ක්‍රියාවලි දෙක එකින් එක හැඳින්වෙන අතර සමාන්තරව නොවේද?
Paŭlo Ebermann

3
@ PaŭloEbermann: සමාන්තරව යනු <(command). grep grep =(ps aux)කිසිදු පේළියක් නොපෙන්වයි.
මැකීජ් පීචොට්කා

Zsh හට ps වෙතින් ප්‍රතිදානය ගැලපේ. print -l ${(M)${(f)¨$(ps aux)¨}:#*fnord*}
ෆ්රියාර්ටෙක්

8

Answer මෙම පිළිතුර GNU විශේෂිත වේ. වඩාත් පොදු විසඳුමක් සඳහා වේන්ගේ පිළිතුර බලන්න .

ක්‍රියාවලි සෙවීම

ඔබ fnordක්‍රියාවලි සොයන්නේ නම් , -Cවිධාන නාමයෙන් තේරීමට ඔබට විකල්පය භාවිතා කළ හැකිය:

ps -C fnord

මෙය ඔබේ අභිමතය පරිදි BSD- සහ POSIX- විලාසිතාවේ ආකෘති විකල්ප සමඟ මිශ්‍ර කළ හැකිය. සම්පූර්ණ ලැයිස්තුවක් සඳහා ps man පිටුව බලන්න .

වෙනත් යමක් සොයනවාද?

විධාන නාමයක් සඳහා නිශ්චිත සෙවීමකට වඩා දියුණු යමක් ඔබට අවශ්‍ය නම්, බලාපොරොත්තු සුන් නොකරන්න! මෙය තවමත් psපයිප්පයේ පැත්තෙන් කළ හැකිය. අප කළ යුතුව ඇත්තේ ක්‍රියාවලීන් psප්‍රති grepresult ලයෙන් බැහැර කිරීමට පැවසීම පමණි :

ps -NC grep | grep 'fnord'

-C grepසියළුම grep ක්‍රියාවලි තෝරා ගන්නා -Nඅතර තේරීම ප්‍රතික්ෂේප කරයි. විධාන තර්ක, විධාන නාමයක කොටසක් හෝ වඩාත් සංකීර්ණ නිත්‍ය ප්‍රකාශන සෙවීම සඳහා මෙය භාවිතා කළ හැකිය.


1
මෙය GNU සමඟ හොඳයි, psනමුත් -CPOSIX විසින් නිශ්චිතව දක්වා නොමැති අතර BSD හි සම්පූර්ණයෙන්ම වෙනස් අර්ථයක් ඇත
එරික් රෙනූෆ්

එය ඇත්ත වශයෙන්ම BSD හා සමාන කිසිවක් නොමැති බව පෙනේ (එයින් අදහස් වන්නේ එය මැක් මත ක්‍රියා නොකරනු ඇති බවයි). PS -C භාවිතා කිරීම මේ ඕනෑම දෙයකට සරලම පිළිතුරයි.
ක්‍රිස්ටෝපර් හන්ටර්

7
ps aux | grep $(echo fnord | sed "s/^\(.\)/[\1]/g")

3
මෙය IOCCC එකක් මෙන් පෙනේ, නමුත් C වෙනුවට යුනික්ස් විධාන රේඛාව සඳහා | grep $(echo fnord)පමණක් ප්‍රමාණවත් නොවේද? “Fnord” හි ඇති සෑම වර්‍ගයක්ම එහි වටිනාකමෙන් සෙවීමට හා ප්‍රතිස්ථාපනය කිරීමට ඔබ sed වෙතින් ඉල්ලා සිටිනවාද? ^^ සුබ පැතුම්. මට ඊටත් වඩා දිගු දෙයක් කළ හැකි යැයි මම සිතමි, නමුත් එය විහිළුවක් නොවනු ඇත ^^
ඔලිවියර් ඩුලැක්

1
මගේ ඉහත අදහස් දැක්වීමේ ස්වරය අහිතකර යැයි සිතිය හැකි බැවින් මම සමාව අයදිමි (මට එය විනාඩි 5 කට පසුව සංස්කරණය කළ නොහැක) ... ඔබේ පිළිතුර ඇත්තෙන්ම ප්‍රීතිමත් කියවීමක් වූ අතර මම ඔබව නරක ලෙස පෙනීමට උත්සාහ නොකළෙමි. මම හිතන්නේ ඔබ මෙය කළේ අරමුණක් ඇතුවයි ^^
ඔලිවියර් ඩුලැක්

1
සමාව ඉල්ලන්න එපා, ඔබේ පිළිතුර කියවීම ඇත්තෙන්ම විනෝදජනකයි (ඒ වගේම හරියටම හරි). මම අදහස් කළේ pgrep -l $ 1 කෙසේ වෙතත්;)
yPhil

3
L ඔලිවියර් ඩියුලැක්: ඔහු පළමු වර්‍ගය එහි වටිනාකමෙන් ආදේශ නොකරයි; ඔහු එය වර්ග වරහන් අතර එහි වටිනාකම සමඟ සංයෝජනය කරයි. (එම වර්ග වරහන් විශේෂ නොවේ, ඒවා වචනාර්ථයෙන් වේ.) මූලික වශයෙන්, ඔහු වේන් වර්නර්ගේ පිළිතුර සාමාන්‍යකරණය කරයි, එවිට පළමු චරිතය වටා වර්ග වරහන් දැමීමේ ක්‍රියාවලිය තිර රචනය කළ හැකිය. +1
LarsH

2
ps aux | grep '[^]]fnord'ඒ ජිම්නාස්ටික් වළක්වනවා.
ස්ටෙෆාන් චසෙලාස්

3

මගේ පිළිතුර 'ps' ලැයිස්තුගත කිරීමක "foobar" සෙවීම සඳහා වන සාමාන්‍ය පිළිතුරෙහි විචලනයකි. "-A" "ps" හි තර්කය "aux" ට වඩා අතේ ගෙන යා හැකි බව මම විශ්වාස කරමි, නමුත් මෙම වෙනස පිළිතුරට අදාල නොවේ. සාමාන්‍ය පිළිතුර මේ වගේ ය:

$ ps -A -ww | grep [f]oobar

ඒ වෙනුවට මම මෙම රටාව භාවිතා කරමි:

$ ps -A -ww | grep [^]]foobar

මෙහි ඇති ප්‍රධාන වාසිය නම්, මෙම රටා මත පදනම්ව ස්ක්‍රිප්ට් ලිවීම පහසු වීමයි, මන්ද ඔබ සොයන ඕනෑම රටාවක් සමඟ ස්ථිතික නූලක් “[^]] සමඟ සංයුක්ත වේ. ඔබට නූලෙහි පළමු අකුර ඉවත් කර හතරැස් වරහන් අතරට ඇතුළු කර එය නැවත එකට සම්බන්ධ කරන්න. කවචයෙන් ස්ක්‍රිප්ට් කරන විට ඔබ සොයන රටාව ඉදිරිපිට "[^]] ඇලවීම පහසුය. Bash හි නූල් කැපීම අවලස්සන දෙයකි, එබැවින් මගේ විචලනය එය වළක්වයි. මෙම විචලනය පවසන්නේ ප්‍රමුඛ පෙළේ දකුණු-වරහනක් නොමැතිව රටාව ගැලපෙන රේඛා පෙන්වන්න]. වර්ග වරහනක් බැහැර කිරීමේ සෙවුම් රටාව ඇත්ත වශයෙන්ම වර්ග වරහන රටාවට එකතු කරන බැවින් එය කිසි විටෙකත් නොගැලපේ.

එබැවින් ඔබට අතේ ගෙන යා හැකි 'psgrep' විධානයක් පහත පරිදි ලිවිය හැකිය. මෙන්න, මම ලිනක්ස්, ඕඑස් එක්ස් බීඑස්ඩී සහ වෙනත් අය අතර වෙනස්කම් සඳහා යම් දීමනාවක් ලබා දෙමි. මෙය 'ps' වෙතින් තීරු ශීර්ෂයන් එක් කරයි, මගේ අවශ්‍යතාවන්ට සරිලන පරිදි වඩාත් අභිරුචි 'ps' ආකෘතියක් සපයයි, තවද විධාන රේඛා තර්ක කිසිවක් මග හැරෙන පරිදි අතිරේක, අමතර පළල ලැයිස්තුගත කිරීමේ ක්‍රියාවලි පෙන්වයි. හොඳයි, බොහෝමයක් මග හැරී නැත. ජාවා ජාවා වීම, එය බොහෝ විට සිදුවිය හැකි නරකම ආකාරයෙන් සිදු කරයි, එබැවින් ඔබ සමහර ජාවා සේවාවන් ක්‍රියාවලි වගුව නිරීක්ෂණය කරන උපරිම අවසර ලත් තර්ක ඉක්මවා යයි. මම විශ්වාස කරන්නේ මෙය අක්ෂර 1024 ක් බවයි. ක්‍රියාවලියක් ආරම්භ කිරීමට අවසර දී ඇති විධාන-හුදකලා දිග බොහෝ දිගු වේ, නමුත් කර්නල් ක්‍රියාවලි වගුව 1K ට වඩා වැඩි කිසිවක් නිරීක්ෂණය කිරීමට කරදර වන්නේ නැත. විධානය ආරම්භ කළ පසු විධාන නාමය සහ තර්ක ලැයිස්තුව isn '

psgrep ()
{
    pattern=[^]]${1};
    case "$(uname -s)" in
        Darwin)
            ps -A -ww -o pid,ppid,nice,pri,pcpu,pmem,etime,user,wchan,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
        ;;
        Linux)
            ps -A -ww -o pid,ppid,tid,nice,pri,pcpu,pmem,etime,user,wchan:20,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
        ;;
        *)  # other UNIX flavors get a minimalist version.
            ps -A -ww | grep -i -e ${pattern}
        ;;
    esac
}

3

මෙය කළ හැකි සරලම ෂෙල්-අ nost ෙයවාදී ක්‍රමය වනුයේ එය පළමුව විචල්‍යයක ගබඩා කිරීමයි:

PS_OUTPUT="$(ps aux)"; echo "$PS_OUTPUT" |grep fnord

ඇමතුම: @ එමානුවෙල්බර්ග්ගේ grep fnord =(ps aux)පිළිතුර අවශ්‍ය වුවද එය වඩාත් අලංකාරයි zsh. මා එය කෙටියෙන් මගේ ආර්සී ලිපිගොනු වල තබා ඇත, නමුත් බැෂ් එම සින්ටැක්ස් ගැන පැමිණිලි කරන්නේ කොන්දේසිගතව තිබියදීත් එහි ඇගයීම වැළැක්විය යුතුය.


මගේ ආර්සී ලිපිගොනු වලින්, ග්‍රෙප්ගේ තර්ක රැගෙන යන සිද්ධි-සංවේදී නොවන අනුවාදයක් මා සතුව ඇත:

psl() {
  local PS_OUTPUT="$(ps auxww)"
  echo "${PS_OUTPUT%%$'\n'*}" >&2  # title, in stderr to avoid pipes
  echo "${PS_OUTPUT#*$'\n'}" |grep -i "${@:-^}"
}

කේත ඇවිදීම, කේත පේළියකට එක් උණ්ඩයක්:

  • වාචික psප්‍රතිදානය ග්‍රහණය කරගන්න ( localවිචල්‍යයකින් ශ්‍රිතය නැවත පැමිණෙන විට එය පහව යයි)
  • පළමු පේළිය (මාතෘකාව) සම්මත දෝෂයකින් පෙන්වන්න එවිට මාතෘකාවට බලපෑමක් නොකර ප්‍රති results ල තවදුරටත් පෙරීම කළ හැකිය. ආදේශකය පවසන්නේ: $PS_OUTPUTපළමු පේළියේ සංග්‍රහයෙන් පසුව සියල්ල රැගෙන ඉවත් කරන්න (regex equal :) s/\n.*$//msg. මෙය මාතෘකාව අතුගා දැමීමෙන් වළක්වයි
  • පළමු පේළිය හැර අනෙක්ps සියල්ල සමඟ ප්‍රතිදානය ප්‍රදර්ශනය කරන්න (රීජෙක්ස් සමාන :) සහ එහි අන්තර්ගතය සිද්ධි-සංවේදී නොවන ලෙස සහ සියලු තර්ක සමඟ මෙම ශ්‍රිතය භාර දී ඇත (කිසිදු තර්කයකදී, ඕනෑම රේඛාවක ආරම්භයට ගැලපෙන පරිදි ගැලපේ සියල්ල)s/^.*\n//m-i^

1

තත්පරයකට වඩා වැඩි කාලයක් ක්‍රියාත්මක නොවූ grep -v grepසියලුම grepක්‍රියාදාමයන් පෙරහන් කරමින් විසඳුමේ දීර් version අනුවාදයක් මෙන්න , එය “සියලු සිදුවීම් ඉවතලන්න” යන්නට වඩා වැඩි දියුණු කිරීමකි grep.

$ ps -ef | grep -vw "00:00:00 grep" | grep <searchTerm>

පිළිවෙලින්

$ ps aux | grep -vw "0:00 grep" | grep <searchTerm>

මෙය අතේ ගෙන යා නොහැකි විය හැකි අතර එය ඔබගේ දේශීය psවිධානයේ සත්‍ය ප්‍රතිදාන ආකෘතිය මත රඳා පවතී .

grepපහසුව සඳහා මෙය වර්ණ ප්‍රතිදානය සමඟ ඒකාබද්ධ කිරීමට ඔබට අවශ්‍ය විය හැකිය :

$ alias grep='grep --color=auto'

0

සමහර විට මෙවර සැබෑ අනුක්‍රමයක් භාවිතා කිරීමට කාලයයි. පයිප්ප භාවිතය එය සමාන්තර කරයි.

ps aux >f && grep tmpfs <f

අවලස්සන නිසා ගොනුවක් ඇති fනමුත් කලින් ක්‍රියාත්මක වූ ක්‍රියාවලියක ප්‍රතිදානය භාවිතා කිරීමට ඔබට අවශ්‍ය අනුක්‍රමික ක්‍රියාවලීන් සඳහා සින්ටැක්ස් නොමැති වීම මගේ වරදක් නොවේ.

අනුක්‍රමික ක්‍රියාකරුවෙකුගේ වාක්‍ය ඛණ්ඩය සඳහා යෝජනාව:

ps aux ||| grep tmpfs

සාමාන්‍ය ජනතාවට ප්‍රවාහයක් පහසුවෙන් පෙරීමට නොහැකි වීම ප්‍රභූ පැලැන්තියට අනුපිළිවෙලින් පදනම් වීමට හේතුවක් නොවේ. එය පරිගණකකරණයේ පසුගාමී පියවරක් වනු ඇත.
Acumenus

@ABB en.wikipedia.org/wiki/Communicating_afteential_processes හි තොම්සන් කවචයේ අවසන් වූවාට වඩා බොහෝ ක්‍රියාකරුවන් ඇත. අනුක්‍රමික ක්‍රියාකරුවෙකු සිටිය හැකි අතර, එහි ප්‍රති result ලය පිටවන විගසම අනුක්‍රමයේ ඊළඟ ක්‍රියාවලියට සන්නිවේදනය කරයි. අතිරේක ක්‍රියාකරුවෙකු ලබා දීමෙන් “පරිගණකකරණයේ පසුගාමී පියවරක්” තරමක් කටුක බව පෙනේ.
ne

කදිම සබැඳියක්, නමුත් ඇත්ත වශයෙන්ම අනුක්‍රමික සැකසුම් CPU සහ මතකය (හෝ තැටි) භාවිතයේදී වඩාත් නරක ය - සමාන්තර සැකසුම් වලට සාපේක්ෂව. මෙම අවස්ථාවෙහිදී, මම මුලින්ම සියලු psප්‍රතිදානයන් මට පෙර ගබඩා කළ යුතු නම් grep, මම වැඩි කාලයක් මතකය (හෝ තැටිය) භාවිතා කරමි.
Acumenus

0

Pgrep විධානය, අනෙක් අය ප්‍රකාශ කර ඇති පරිදි, නම සහ වෙනත් ගුණාංග මත පදනම් වූ ක්‍රියාවලි වල PID (ක්‍රියාවලි හැඳුනුම්පත) නැවත ලබා දෙනු ඇත. උදාහරණයක් වශයෙන්,

pgrep -d, -u <username> <string>

පරිශීලකයා විසින් ක්‍රියාත්මක කරනු ලබන නම ගැලපෙන සියලුම ක්‍රියාවලීන්ගෙන් කොමාවකින් (,) වෙන් කරන ලද PID ඔබට ලබා දෙනු ඇත <username>. නිශ්චිත ගැලපීම් පමණක් ලබා දීමට පෙර ඔබට -x ස්විචය භාවිතා කළ හැකිය.

ඔබට මෙම ක්‍රියාදාමයන් පිළිබඳ වැඩි විස්තර ලබා ගැනීමට අවශ්‍ය නම් (ps වෙතින් aux විකල්ප ක්‍රියාත්මක වන පරිදි), ඔබට ps සමඟ -p විකල්පය භාවිතා කළ හැකිය, එය PID මත පදනම්ව ගැලපේ. උදාහරණයක් ලෙස, උදාහරණයක් ලෙස

ps up $(pgrep -d, -u <username> <string>)

pgrep විධානයට ගැලපෙන සියලුම PID වල සවිස්තර තොරතුරු ලබා දෙනු ඇත.


pspgrepහිස් කට්ටලයක් ලබා දෙන්නේ නම් අසමත් වේ . මට ඔබේ පිළිතුරක් ඇති අතර මෙම ගැටළුව විසඳීමට උත්සාහ කරයි.
Acumenus

0

ක්‍රියාවලියේ ssh-agentPID නොපෙන්වා පරිශීලක නාමය සඳහා PID සොයා ගැනීමට සරල උදාහරණයක් මෙන්න grep:

ps xu | grep "${USER}.*[ ]/usr/bin/ssh-agent" | awk '{print $1 $2;}'

ssh-agentවත්මන් පරිශීලකයා සඳහා kill ාතනය කිරීමට ඔබට අවශ්‍ය නම් ඔබට පහත විධානය භාවිතා කළ හැකිය:

kill `ps xu | grep "${USER}.*[ ]/usr/bin/ssh-agent" | awk '{print $2;}'`

හුරුබුහුටි අන්වර්ථයක් නිර්මාණය කිරීම සඳහා ඔබේ ~ / .bashrc හෝ ~ / .zshrc ගොනුවට එකතු කරන්න:

function function1 () {
    ps xu | grep "$1.*$2" | awk '{print $1" "$2" "$11;}'
}
alias mygrep="function1"

නිත්‍ය ප්‍රකාශන ඉගෙන ගැනීමට සෑම කෙනෙකුටම බල කිරීම සඳහා මෙහි අන්වර්ථය භාවිතා කිරීම උදාහරණ වේ:

. /etc/profile #to make alias usable
mygrep ${USER} ${PROCESS_PATH}
mygrep ${USER} "[f]nord"
mygrep "[f]nord"
mygrep ".*[s]shd"

PS මම උබුන්ටු සහ ජෙන්ටූ වල පමණක් මෙම විධානයන් පරීක්ෂා කර ඇත්තෙමි.


(1) පරිශීලකයා තමාගේම ක්‍රියාවලියක් සොයන බව ප්‍රශ්නය නොකියයි - පරිශීලකයා ඔහු සොයන ක්‍රියාවලියේ හිමිකරු නොදැන සිටිය හැකිය. (2) මෙම පිළිතුර තරම් මනස්කාන්ත ලෙස, ඔබ කීවා නම් එය තවමත් අසාර්ථක වනු ඇත "${USER}.* /usr/bin/ssh-agent". එය ක්‍රියාත්මක වන්නේ ඔබ කී නිසා ය [ ]; එනම්, ඔබ භාවිතා කරන්නේ පිළිගත් පිළිතුරේ යාන්ත්‍රණය පමණි. ඔබත් එසේ විය හැකිය grep "[s]sh-agent".
ජී-මෑන් පවසන්නේ 'මොනිකා නැවත

ඔයා හරි. (1) වරකට වරක් මෙම පිටුවට මුහුණ දෙන බව මට පෙනී ගිය හෙයින් ප්‍රයෝජනවත් විය හැකි දේ මම බෙදා ගතිමි. (2) ඔව් මම පිළිගත් පිළිතුර මෙන් නිත්‍ය ප්‍රකාශනය භාවිතා කළෙමි. . (4) function 1 සහ $ 2 අතිච්ඡාදනය නොවන බැවින් ක්‍රියාකාරීත්වය අර්ථ දැක්විය යුතු ආකාරය ද පෙන්වා දී ඇත. Thx # G-Man
කොන්ස්ටන්ටින් සාගෝර්ස්කි

-2

-X (හරියටම ගැලපීම) විකල්පය භාවිතා කිරීම මට වැඩ කළේය. මම එය -f (පූර්ණ විධාන රේඛාව) සමඟ ඒකාබද්ධ කළෙමි, එබැවින් මට මගේ ක්‍රියාවලිය හරියටම ගැලපෙන්නේ:

pgrep -x -f "path_i_used_when_starting/cmd params_i_used"

ඩ්‍රයිව්-බයි පහත් කිරීම සිදුකරන කවුරුන් හෝ තමන් ගැනම පැහැදිලි කරයිද? වසර ගණනාවක් තිස්සේ මා වෙනුවෙන් මෙම ගැටලුව විසඳීමට මෙය කටයුතු කරමින් සිටී.
moodboom

-3

ඔබට .bashrc මේ ආකාරයට අන්වර්ථ නාමයක් නිර්වචනය කිරීමෙන් ඔබට එය පහසුවෙන් කළ හැකිය :

alias grep='grep -v grep | grep'

අඩු ඡන්දය දුන්නේ කවුරුන්ද යන්න හෝ ඇයිදැයි නිශ්චිතවම කිව නොහැකි නමුත් pgrep නොකරන ps හි පූර්ණ භාවිතය භාවිතා කිරීමට මෙය ඔබට ඉඩ සලසයි.
opticyclic

1
මෙය නොදැනුවත්වම වෙනත් grep ක්‍රියාවලි බැහැර කරන බව පමණක් නොව; එය grepවෙනත් අවස්ථාවල භාවිතය ද බිඳ දමයි . උත්සාහ කරන්න echo I love grep | grep love.
ට්‍රොසෝස්

rotrosos අවුරුදු 11 කට ආසන්න කාලයක් මම * නික්ස්-ඉන්ග් .. ඒ රටාව කවදාවත් භාවිතා කර නැත ... සමහරවිට ලබන වසරේ වුවද - කවුද නිවැරදිව දන්නේ.
a20
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.