අවසන් වරට ක්‍රියාත්මක කරන ලද විධානයේ ෂෙල් ස්ක්‍රිප්ට් එකෙන් ලබා ගන්නේ කෙසේද?


274

මට මේ වගේ ෂෙල් ස්ක්‍රිප්ට් එකක් අවශ්‍යයි:

my-app &
echo $my-app-pid

නමුත් මම දන්නේ නැහැ සාධාරණ ලෙස ක්‍රියාත්මක කරන ලද විධානය ලබා ගන්නේ කෙසේද කියා.

මම දන්නවා මට jobs -p my-appවිධානය භාවිතා කර pid එක අල්ලගන්න පුළුවන් කියලා. නමුත් මට ෂෙල් එක කිහිප වතාවක් ක්‍රියාත්මක කිරීමට අවශ්‍ය නම්, මෙම ක්‍රමය ක්‍රියා නොකරනු ඇත. මෙම නිසා jobspec අපැහැදිලි වේ.

Answers:


364

අවසන් වරට ක්‍රියාත්මක කරන ලද විධානයේ PID $!එක ෂෙල් විචල්‍යයේ ඇත:

my-app &
echo $!

1
එය උදා. [1] 893. මට අවශ්‍ය අංක පමණි.
user3153014

37
මෙය පසුබිමේ ආරම්භ කරන ලද වැඩසටහන් සඳහා වන බව සැලකිල්ලට ගත යුතුය . පසුබිම් ක්‍රියාවලියක් ආරම්භ කර නොමැති නම් පරාමිතිය සකසා නොමැත.
ramrunner

5
තවත් වටිනා විසඳුමක් යෝජනා කර ඇත (පිළිතුරකට පිළිතුරක්) දැන් ආරම්භ කළ ක්‍රියාවලියෙන් ඉවත් වන්නේ කෙසේද : ඔහ්, සහ “ඔනෙලිනර්”: /bin/sh -c 'echo $$>/tmp/my.pid && exec program args' &- sysfault Nov 24 '10 at 14:28
imz - Ivan Zakharyaschev

15
[user3153014 පසුබිම් කාර්යය ආරම්භ කිරීමෙන් පසු "[2] 2625" වැනි නූල් ෂෙල් මඟින් මුද්‍රණය කෙරේ. මෙය ප්‍රතිදානය හා සම්බන්ධ නොවේecho $!
පීටර් ග්ලැඩ්කික්

ක්‍රියාවලිය අවසන් වන තෙක් බලා සිටීමට අවශ්‍ය වූ විට මම සාමාන්‍යයෙන් එවැනි කේතයක් ස්ක්‍රිප්ට් එකක භාවිතා කරමි. my-app & myVar=$! ; fg. fgක්‍රියාවලිය නැවත පෙරට ගෙන එයි. මට පසුව මුද්‍රණය කළ හැකි echo $myVarඅතර මගේ යෙදුම දැනටමත් අවසන් වී ඇති බව මට හොඳටම විශ්වාසයි.
Vrata Blazek

71

ලබා ගන්න PID:

#!/bin/bash
my-app &
echo $!

PIDවිචල්යයෙන් සුරකින්න :

#!/bin/bash
my-app &
export APP_PID=$!

සියලුම අවස්ථා PIDපෙළ ගොනුවේ සුරකින්න :

#!/bin/bash
my-app &
echo $! >>/tmp/my-app.pid

ප්‍රතිදානය, දෝෂ සහ PIDවෙන් කළ ලිපිගොනු වල සුරකින්න :

#!/bin/bash
my-app >/tmp/my-app.log 2>/tmp/my-app.error.log &
echo $! >>/tmp/my-app.pid

echo "my-app PID's: $(cat /tmp/my-app.pid)"

3
ප්‍රශ්නය නැවත හරවා යැවීම ගැන විමසුවේ නැත, එවිට ඔබේ පිළිතුර බොහෝ දුරට පිළිගත් පිළිතුරට සමාන වේ. හැර වෙනත් අවස්ථාවක් my-appඅවසන් වුවහොත් සහ ඊටත් වඩා නරක නම් එහි PID පසුව නැවත භාවිතා වේ නම් ඔබේ ගොනුවේ නරක තොරතුරු ඔබට ලැබෙනු ඇත. මම හිතන්නේ නැහැ මේ පිළිතුර ඇත්තටම පවතින පිළිගත් පිළිතුර අගය බොහෝ කරයි
එරික් Renouf

RicEricRenouf පෝස්ට් යාවත්කාලීන කරන ලදි!
එඩ්වාඩෝ කියෝමෝ

ප්‍රයෝජනවත් විය හැකි තවත් ව්‍යුත්පන්නය. මෙය PID ලබා ගන්නා අතරම එය (බොහෝ දුරට) පෙරබිම් ක්‍රියාවලියක් ලෙස සලකයි: sleep 4 | grep INVALID & export MY_PID=$!; fg; echo $MY_PID returned with $?`
mlathe

APP = main &PID අල්ලා ගැනීමට ක්‍රමයක් නොවේද?
මිස්මීස්

3

වැනි දෙයක් උත්සාහ කරන්න

pidof my_app >> /tmp/my_app.pid

2
බාහිර විධානය, සහ මන්දගාමී, පද්ධතියට PID සෘජුවම ලබා දිය හැකි නම්, එය සොයා ගැනීම සඳහා සියලු ක්‍රියාදාමයන් හරහා සෙවිය යුත්තේ ඇයි? ඔබට නිවැරදි වටිනාකමක් ලැබෙනු ඇතැයි විශ්වාස කළ නොහැක
papo

-4

මේ වගේ දෙයක් උත්සාහ කරන්න:

 ps ef | grep "[m]y-app" | awk '{print $2}'

ඔබගේ ක්‍රියාවලියේ පළමු අකුර අතර [ ]තැබීමෙන් ඔබට grepක්‍රියාවලිය ලැයිස්තුවේ නොලැබෙන බවට සහතික වේ. අවශ්‍ය නම් ඔබේ පරිශීලක නාමයට ග්‍රෙප් එකක් ද එක් කළ හැකිය.


9
එය ඉතා බිඳෙන සුළු වන අතර my-appඑක් වරකට වඩා ක්‍රියාත්මක වුවහොත් එය ක්‍රියා නොකරයි - davidshen84 විශේෂයෙන් එම නඩුව ගැන කනස්සල්ලට පත්ව සිටී.
මැට්

2
ඔබ මෙම මාර්ගයට ගියත් pgrepඒ වෙනුවට භාවිතා කළ යුතුය .
විලෙම්
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.