今回は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 { |