今回はexecveの中を流れを追ってみる。
- @mmitou がexecve観察用のSystemtapスクリプトを書いてきてくれた(https://gist.github.com/3433352)
- 「SystemTap」とは簡単なスクリプトを書くことで、稼働中のLinuxカーネルに対して実行情報を取得するためのツール。
| class A<T> {} | |
| class C<T extends T> extends A<T> {} | |
| main() {} |
| public class Main<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46,T47,T48,T49,T50,T51,T52,T53,T54,T55,T56,T57,T58,T59,T60,T61,T62,T63,T64,T65,T66,T67,T68,T69,T70,T71,T72,T73,T74,T75,T76,T77,T78,T79,T80,T81,T82,T83,T84,T85,T86,T87,T88,T89,T90,T91,T92,T93,T94,T95,T96,T97,T98,T99,T100,T101,T102,T103,T104,T105,T106,T107,T108,T109,T110,T111,T112,T113,T114,T115,T116,T117,T118,T119,T120,T121,T122,T123,T124,T125,T126,T127,T128,T129,T130,T131,T132,T133,T134,T135,T136,T137,T138,T139,T140,T141,T142,T143,T144,T145,T146,T147,T148,T149,T150,T151,T152,T153,T154,T155,T156,T157,T158,T159,T160,T161,T162,T163,T164,T165,T166,T167,T168,T169,T170,T171,T172,T173,T174,T175,T176,T177,T178,T179,T180,T181,T182,T183,T184,T185,T186,T187,T188,T189,T190,T191,T192,T193,T194,T195,T196,T197,T198,T199,T200,T201,T202,T203,T204,T205,T206,T207,T208,T209,T210,T211,T212,T213,T214,T215,T216,T217,T218,T219,T220,T221,T222,T223 |
| * syscall勉強会 #1 | |
| - 告知: http://connpass.com/event/700/ | |
| - この勉強会の趣旨: Linuxシステムコールを通して、カーネルの仕組みを勉強する | |
| - システムコール == カーネルのAPI。プログラマにとって馴染みやすそう。 | |
| - 本日のお題「getpid」 | |
| - プロセスIDを取得するシステムコール | |
| - スライド: http://shomah4a.net/slides/linuxsyscall/01/ | |
| - サンプルコード: http://shomah4a.net/slides/linuxsyscall/01/_downloads/sample.c |
| import lombok.experimental.ExtensionMethod; | |
| // @ExtensionMethod({ String.class }) // Compile Error. | |
| @ExtensionMethod({ Extensions.class }) | |
| public class Main { | |
| public static void main(String[] args) { | |
| System.out.println("Hello, %s".format("World.")); // => "Hello, World." | |
| } | |
| } |
| import lombok.experimental.ExtensionMethod; | |
| @ExtensionMethod({ Extensions1.class, Extensions2.class }) | |
| public class Main { | |
| public static void main(String[] args) { | |
| System.out.println("test".addedMethod()); // => "test added method 1" | |
| } | |
| } | |
| class Extensions1 { | |
| public static String addedMethod(String value) { |
| import lombok.experimental.ExtensionMethod; | |
| @ExtensionMethod({ Extensions1.class, Extensions2.class }) | |
| public class Main { | |
| public static void main(String[] args) { | |
| System.out.println("test".addedMethod()); // => test added method 2 | |
| } | |
| } | |
| class Extensions1 { |
今回はexecveの中を流れを追ってみる。
| object Mahjong { | |
| type Hands = Seq[(Int, Int)] | |
| type State = (List[Mentsu], Option[Int], Option[Mati]) | |
| abstract class Mentsu | |
| case class Zyuntsu(n: Int) extends Mentsu | |
| case class Kotsu(n: Int) extends Mentsu | |
| abstract class Mati | |
| case class ZyuntsuMati(n1: Int, n2:Int) extends Mati |
| trait FindTaskContext { | |
| def order:String | |
| def page:Int | |
| def limit:Int | |
| } | |
| class TaskController { | |
| def findTask(code:String, name:String, order:String, limit:Int, page:Int): List[Task] = { | |
| // 実際はDBの接続先情報とかも必要なのでもっと複雑になると思う | |
| object Context extends FindTaskContext { |