קצת טיפים לתכנות ברובי

הצטברו לי ב3 חודשים האחרונים כמה קטעי קוד נחמדים ברובי אשר לא יכולים להכיל פוסט משל עצמם ככה סתם כי אין הרבה מה לכתוב, אבל יהיה מאוד נחמד לרכז אותם בייחד.

חיפוש מספר בטווח:

a = 1
b = '9'
(a..b.to_i).include? 5
#=> true

זה קוד הרבה יותר הגיוני מאשר לחפש גדול שווה וקטן שווה ל5 שיש ברוב השפות הקיימות.

קבלת ה pid שלי (אני מציג 2 דרכים):

puts $$
puts Process.pid

הדרך הראשונה היא דרך ה"פרל", והשנייה היא יותר object oriented.
קבל ה pid של אבא (או שלי, אם אני האבא של עצמי):

puts Process.ppid

אם אנחנו רוצים לשנות המשתמש שלנו או המשתמש האפקטיבי שלנו ברובי, לצערי חייבים לדעת מה המספר של המשתמש (או קבוצה במידה ויש צורך בקבוצה), ועושים את זה בצורה הבאה:

Process.euid = 0 # you shell be root user (if you are allowed)
Process.egid = 0 # you shell be root group (if you are allowed)

זה כמובן חשוב אם אנחנו מריצים תהליך כroot (למשל) ורוצים להיות משתמש אחר, בד"כ nobody כלשהו.

משחקי חתול ועכבר של signals:

 # The victim
trap('KILL'){ # Yes only proc is allowed, and there is no support for block
  puts "Ouch, that's hurt! Goodbye cruel world !"
}
trap(3) {
  puts "I'm not quitting this stupid execution !"
}

# The killer
Process.kill(9, pid) # signal number. if you pass it as string, it will add SIG before 9
Process.kill('QUIT', pid) # signal name... Lower case will add SIG before quit

טוב זו כל האלימות שאציג כאן כרגע, או סתם טיפים …

4 מחשבות על “קצת טיפים לתכנות ברובי

  1. שי

    פרט קטן: ברוב המערכות דמויות יוניקס, אתה לא יכול לתפוס את SIGKILL (הידוע גם כ־9). ה־Trap הראשון לא אמור לעבוד לך, וה־kill עם 9 אמור להוריד את התהליך בלי לתת לו שום הזדמנות להיפרד מהעולם האכזר.

  2. ik_5 מאת

    שי1: בבקשה.

    שי2, אתה יכול לתפוס את SIGKILL, אבל לא לעצור אותו (בניגוד לשאר):
    KILL 9 exit this signal may not be blocked

    מתוך ה man file. אבל כן, באמת שהוא לא נכנס פנימה ברובי, אבל היה לי יותר חשוב להדגים עבודה עם trap מאשר כל דבר אחר.

כתיבת תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s