[corrupted "utf-8" subject]

rouvas at di.uoa.gr rouvas at di.uoa.gr
Tue Sep 30 23:44:40 EEST 2008


Giorgos Keramidas wrote:
> On Tue, 30 Sep 2008 04:01:16 +0300 (EEST), rouvas at di.uoa.gr wrote:
>> Giorgos Keramidas wrote:
>>> Αν προσπαθήσεις να το κάνεις όλο αυτό
>>> με shell scripting, θα φας τα
>>> νιάτα σου προσπαθώντας να μαντέψεις τι
>>> process ID έχει το child process,
>>> θα κάνεις χακιές πάνω από χακιές με
>>> έξτρα σάλτσα από χακεμένες χακιές,
>>> θα βαρεθείς και θα το παρατήσεις.
>>
>> Συγνώμη, δηλαδής και με το μπαρδόν,
>> γιατί το $! είναι "χακιά";
>
>>> Σε κάποια πιο 'high level' γλώσσα όμως,
>>> μπορείς να γράψεις πράγματα όπως:
>>>
>>>     [snip python code]
>>
>> Είμαι σίγουρος ότι ξέρεις την ιστορία
>> με το "Hello World" και τον
>> τρόπο υλοποίησής του με βάση την
>> εμπειρία του προγραμματιστή.  Εσένα σε
>> βάζω κάπου προς τη μέση (πριν από αυτή,
>> σε λίγο θα σκεφθείς μια
>> καλύτερη υλοποίηση σε erlang... εγώ είμαι
>> ακόμα στην αρχή... αλλά
>> μήπως έχω κάνει overlfow;).
>
> Hint: τίνος process το PID τυπώνεται παρακάτω,
> και τι σχέση έχει με το
> `job id' το οποίο πρέπει να τερματίσεις (3235
> σε αυτή την περίπτωση);
>
> keramida at kobe:/home/keramida$ ( sleep 3 ; echo $$ ) & echo $! ; sleep 5
> [1] 3235
> 3235
> 3216
> [1]+  Done                    ( sleep 3; echo $$ )
> keramida at kobe:/home/keramida$

Εμένα μου φαίνεται απλό. Το $! σου δίνει
το process ID της τελευταίας process που
ξεκίνησε *αμέσως* πριν από αυτό. Ποια
είναι η τελευταία process στο παράδειγμά
σου; Βρες την και θα έχεις απάντηση στο
ερώτημά σου. Αν δεν μπορείς να
απαντήσεις, δεν θα φταίει το bash, ούτε το
$!, αλλά ο χρήστης που έμπλεξε
τοιουτοτρόπως και εντυπωσιακώς τα
"μπούτια" του.

Εν προκειμένω, είναι προφανές ότι το
τελευταίο process είναι πριν από την κλήση
του $! είναι αυτό της παρένθεσης (το subprocess
δηλαδή όχι οι καθαυτό εντολές εντός της
παρενθέσεως). Το οποίο είναι όντως το 3235,
όπως ακριβώς σου λέει το $!. Τέλος πάντων
δεν χρειάζεται να στο εξηγώ, γνωρίζω ότι
γνωρίζεις πολύ καλά. Που είναι η χακιά;
Δεν παρακάμπτεις τίποτα, ούτε
εκμεταλλεύεσαι παρενέργειες, ούτε
τίποτα εξωπραγματικό. Τεκμηριωμένα
πράματα είναι αυτά.

Πάντως, είναι και λίγο εκνευριστικό, ε;
Είσαι αρκετά έμπειρος, ώστε να μην
χρειάζεται να επιδεικνύεις τις γνώσεις
σου με εντυπωσιακά μεν άσχετα ως προς
την ουσία δε, παραδείγματα. (δεν είναι
απόπειρα κολακίας, ούτε που σε ξέρω, τα
γραφόμενά σου στη λίστα διαβάζω...)

Έπειτα, είναι και το άλλο. Ο άνθρωπος που
έκανε την αρχική ερώτηση, είχε ένα πολύ
απλό πρόβλημα, το οποίο λυνόταν απλά και
αποτελεσματικά με την χρήση του $!. Η
προσέγγισή σου για το συγκεκριμένο
πρόβλημα, παρόλο που πιθανόν να
αντιμετωπίζει και καταστάσεις του Pathfinder
στον Άρη ή όπου αλλού το στείλουν, την
θεωρώ υπερβολική και σε συνδυασμό με τον
χαρακτηρισμό του $! ως χακιά με έκανε να
σου απαντήσω.

Αυτά,
Στάθης





More information about the Linux-greek-users mailing list