(command.CommandList children: [ (command.ShAssignment left: <Id.Lit_VarLike 'tracing='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'tracing='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'tracing='> name:tracing) op: assign_op.Equal rhs: {<'/sys/kernel/debug/tracing'>} ) ] redirects: [] ) (command.CommandList children: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'flock='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'flock='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'flock='> name:flock) op: assign_op.Equal rhs: {<'/var/tmp/.ftrace-lock'>} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment left: <Id.Lit_VarLike 'wroteflock='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'wroteflock='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'wroteflock='> name:wroteflock) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) ] ) (command.CommandList children: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'opt_duration='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'opt_duration='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'opt_duration='> name:opt_duration) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'duration='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'duration='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'duration='> name:duration) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'opt_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'opt_name='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'opt_name='> name:opt_name) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'name='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'name='> name:name) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'opt_pid='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'opt_pid='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'opt_pid='> name:opt_pid) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'pid='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'pid='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'pid='> name:pid) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment left: <Id.Lit_VarLike 'ftext='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ftext='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ftext='> name:ftext) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) ] ) (command.CommandList children: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'opt_time='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'opt_time='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'opt_time='> name:opt_time) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'opt_fail='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'opt_fail='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'opt_fail='> name:opt_fail) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'opt_file='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'opt_file='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'opt_file='> name:opt_file) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment left: <Id.Lit_VarLike 'file='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'file='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'file='> name:file) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) ] ) (command.ShAssignment left: <Id.Lit_VarLike 'kevent_entry='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'kevent_entry='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'kevent_entry='> name:kevent_entry) op: assign_op.Equal rhs: {<'events/syscalls/sys_enter_kill'>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'kevent_return='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'kevent_return='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'kevent_return='> name:kevent_return) op: assign_op.Equal rhs: {<'events/syscalls/sys_exit_kill'>} ) ] redirects: [] ) (command.Simple blame_tok: <trap> more_env: [] words: [{<trap>} {(SQ <':'>)} {<INT>} {<QUIT>} {<TERM>} {<PIPE>} {<HUP>}] redirects: [] do_fork: T ) (command.ShFunction keyword: <Id.KW_Function function> name_tok: <usage> name: usage body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<END>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'USAGE: killsnoop [-hst] [-d secs] [-p PID] [-n name] [filename]\n'> <' -d seconds # trace duration, and use buffers\n'> <' -n name # process name to match \n'> <' -p PID # PID to match on kill issue\n'> <' -t # include time (seconds)\n'> <' -s # human readable signal names\n'> <' -h # this usage message\n'> <' eg,\n'> <' killsnoop # watch kill()s live (unbuffered)\n'> <' killsnoop -d 1 # trace 1 sec (buffered)\n'> < ' killsnoop -p 181 # trace kill()s issued to PID 181 only\n' > <'\n'> <'See the man page and example file for more info.\n'> ] ) ) (Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>}) ] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit>) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction keyword: <Id.KW_Function function> name_tok: <warn> name: warn body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'WARNING: command failed '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ($ Id.VSub_At '@') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') ) } ] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) ] spids: [264 275] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction keyword: <Id.KW_Function function> name_tok: <end> name: end body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [(Redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Ending tracing...'>)}] redirects: [(Redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})] do_fork: T ) (command.Simple blame_tok: <cd> more_env: [] words: [{<cd>} {($ Id.VSub_DollarName tracing)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <warn> more_env: [] words: [{<warn>} {(DQ <'echo 0 > '> ($ Id.VSub_DollarName kevent_entry) <'/enable'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <warn> more_env: [] words: [{<warn>} {(DQ <'echo 0 > '> ($ Id.VSub_DollarName kevent_return) <'/enable'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <warn> more_env: [] words: [{<warn>} {(DQ <'echo > trace'>)}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.DParen left: <Id.Op_DLeftParen _> child: ($ Id.Lit_ArithVarLike wroteflock) right: <Id.Op_DRightParen _> redirects: [] ) (command.Simple blame_tok: <warn> more_env: [] words: [{<warn>} {(DQ <'rm '> ($ Id.VSub_DollarName flock))}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction keyword: <Id.KW_Function function> name_tok: <die> name: die body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_At '@'))}] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction keyword: <Id.KW_Function function> name_tok: <edie> name: edie body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_At '@'))}] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple blame_tok: <exec> more_env: [] words: [{<exec>}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (Redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) (command.Simple blame_tok: <end> more_env: [] words: [{<end>}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <getopts> more_env: [] words: [ {<getopts>} {<d> <Id.Lit_Colon ':'> <hn> <Id.Lit_Colon ':'> <p> <Id.Lit_Colon ':'> <st>} {<opt>} ] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_DollarName opt)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <d> pattern: (pat.Words words:[{<d>}]) middle: <Id.Right_CasePat _> action: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'opt_duration='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'opt_duration='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'opt_duration='> name: opt_duration ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment left: <Id.Lit_VarLike 'duration='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'duration='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'duration='> name:duration) op: assign_op.Equal rhs: {($ Id.VSub_DollarName OPTARG)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <n> pattern: (pat.Words words:[{<n>}]) middle: <Id.Right_CasePat _> action: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'opt_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'opt_name='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'opt_name='> name:opt_name) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment left: <Id.Lit_VarLike 'name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'name='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'name='> name:name) op: assign_op.Equal rhs: {($ Id.VSub_DollarName OPTARG)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <p> pattern: (pat.Words words:[{<p>}]) middle: <Id.Right_CasePat _> action: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'opt_pid='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'opt_pid='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'opt_pid='> name:opt_pid) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment left: <Id.Lit_VarLike 'pid='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'pid='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'pid='> name:pid) op: assign_op.Equal rhs: {($ Id.VSub_DollarName OPTARG)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <t> pattern: (pat.Words words:[{<t>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'opt_time='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'opt_time='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'opt_time='> name:opt_time) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <s> pattern: (pat.Words words:[{<s>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'opt_fancy='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'opt_fancy='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'opt_fancy='> name:opt_fancy) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <h> pattern: (pat.Words words:[{<h>} {<Id.Lit_QMark '?'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [ {<shift>} { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Minus left: {($ Id.VSub_DollarName OPTIND)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.DParen left: <Id.Op_DLeftParen _> child: {($ Id.VSub_Pound '#')} right: <Id.Op_DRightParen _> redirects: [] ) (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.Binary op_id: Id.Arith_DAmp left: ($ Id.Lit_ArithVarLike opt_pid) right: ($ Id.Lit_ArithVarLike opt_name) ) right: <Id.Op_DRightParen _> redirects: [] ) (command.Simple blame_tok: <die> more_env: [] words: [{<die>} {(DQ <'ERROR: use either -p or -n.'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.DParen left: <Id.Op_DLeftParen _> child: ($ Id.Lit_ArithVarLike opt_pid) right: <Id.Op_DRightParen _> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'ftext='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ftext='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ftext='> name:ftext) op: assign_op.Equal rhs: {(DQ <' issued to PID '> ($ Id.VSub_DollarName pid))} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.DParen left: <Id.Op_DLeftParen _> child: ($ Id.Lit_ArithVarLike opt_name) right: <Id.Op_DRightParen _> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'ftext='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ftext='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ftext='> name:ftext) op: assign_op.Equal rhs: { (DQ <' issued by process name '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ($ Id.VSub_DollarName name) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') ) } ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen left: <Id.Op_DLeftParen _> child: ($ Id.Lit_ArithVarLike opt_duration) right: <Id.Op_DRightParen _> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'Tracing kill()s'> ($ Id.VSub_DollarName ftext) <' for '> ($ Id.VSub_DollarName duration) <' seconds (buffered)...'> ) } ] redirects: [] do_fork: T ) ] spids: [613 623] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Tracing kill()s'> ($ Id.VSub_DollarName ftext) <'. Ctrl-C to end.'>)}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.AndOr children: [ (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Unary op_id:Id.BoolUnary_x child:{<'/usr/bin/mawk'>}) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'awk='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'awk='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'awk='> name:awk) op: assign_op.Equal rhs: {(DQ <mawk>)} ) ] redirects: [] ) (command.Simple blame_tok: <mawk> more_env: [] words: [{<mawk>} {<-W>} {<interactive>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [{<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '?')} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'awk='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'awk='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'awk='> name:awk) op: assign_op.Equal rhs: {(DQ <'mawk -W interactive'>)} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.AndOr children: [ (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Unary op_id:Id.BoolUnary_x child:{<'/usr/bin/gawk'>}) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'awk='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'awk='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'awk='> name:awk) op: assign_op.Equal rhs: {(DQ <'gawk --non-decimal-data'>)} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <cd> more_env: [] words: [{<cd>} {($ Id.VSub_DollarName tracing)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ <'ERROR: accessing tracing. Root user? Kernel has FTRACE?\n'> <' debugfs mounted? (mount -t debugfs debugfs /sys/kernel/debug)'> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Unary op_id:Id.BoolUnary_e child:{($ Id.VSub_DollarName flock)}) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ <'ERROR: ftrace may be in use by PID '> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {($ Id.VSub_DollarName flock)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <' '> ($ Id.VSub_DollarName flock) ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {($ Id.VSub_Dollar '$')}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName flock)} ) ] do_fork: T ) (command.Simple blame_tok: <die> more_env: [] words: [{<die>} {(DQ <'ERROR: unable to write '> ($ Id.VSub_DollarName flock) <.>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'wroteflock='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'wroteflock='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'wroteflock='> name:wroteflock) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<nop>}] redirects: [(Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<current_tracer>})] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<1>}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName kevent_entry) <'/enable'>} ) ] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <edie> more_env: [] words: [{<edie>} {(DQ <'ERROR: enabling kill() entry tracepoint Exiting.'>)}] redirects: [] do_fork: T ) ] spids: [794 808] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<1>}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName kevent_return) <'/enable'>} ) ] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <edie> more_env: [] words: [{<edie>} {(DQ <'ERROR: enabling kill() return tracepoint. Exiting.'>)}] redirects: [] do_fork: T ) ] spids: [819 833] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.AndOr children: [ (command.DParen left: <Id.Op_DLeftParen _> child: ($ Id.Lit_ArithVarLike opt_time) right: <Id.Op_DRightParen _> redirects: [] ) (command.Simple blame_tok: <printf> more_env: [] words: [{<printf>} {(DQ <'%-16s '>)} {(DQ <TIMEs>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(DQ <'%-16.16s %-6s %-8s %-10s %4s'> <Id.Lit_BadBackslash '\\'> <n>)} {(DQ <COMM>)} {(DQ <PID>)} {(DQ <TPID>)} {(DQ <SIGNAL>)} {(DQ <RETURN>)} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'offset='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'offset='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'offset='> name:offset) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <Id.VSub_DollarName '$awk'> more_env: [] words: [ {($ Id.VSub_DollarName awk)} { (SQ <'BEGIN { o = 0; }\n'> <' $1 == "#" && $2 ~ /TASK/ && NF == 6 { o = 1; }\n'> <' $2 ~ /TASK/ { print o; exit }'> ) } {<trace>} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <warn> more_env: [] words: [{<warn>} {(DQ <'echo > trace'>)}] redirects: [] do_fork: T ) (command.Pipeline children: [ (command.Subshell left: <Id.Op_LParen _> child: (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen left: <Id.Op_DLeftParen _> child: ($ Id.Lit_ArithVarLike opt_duration) right: <Id.Op_DRightParen _> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <sleep> more_env: [] words: [{<sleep>} {($ Id.VSub_DollarName duration)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<trace>}] redirects: [] do_fork: T ) ] spids: [938 948] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<trace_pipe>}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) right: <Id.Right_Subshell _> redirects: [] ) (command.Simple blame_tok: <Id.VSub_DollarName '$awk'> more_env: [] words: [ {($ Id.VSub_DollarName awk)} {<-v>} {<Id.Lit_VarLike 'o='> ($ Id.VSub_DollarName offset)} {<-v>} {<Id.Lit_VarLike 'opt_name='> ($ Id.VSub_DollarName opt_name)} {<-v>} {<Id.Lit_VarLike 'name='> ($ Id.VSub_DollarName name)} {<-v>} {<Id.Lit_VarLike 'opt_duration='> ($ Id.VSub_DollarName opt_duration)} {<-v>} {<Id.Lit_VarLike 'opt_time='> ($ Id.VSub_DollarName opt_time)} {<-v>} {<Id.Lit_VarLike 'opt_pid='> ($ Id.VSub_DollarName pid)} {<-v>} {<Id.Lit_VarLike 'opt_fancy='> ($ Id.VSub_DollarName opt_fancy)} { (SQ <'\n'> <' # fancy signal names\n'> <' BEGIN {\n'> <' signals[1] = "SIGHUP"\n'> <' signals[2] = "SIGINT"\n'> <' signals[3] = "SIGQUIT"\n'> <' signals[4] = "SIGILL"\n'> <' signals[6] = "SIGABRT"\n'> <' signals[8] = "SIGFPE"\n'> <' signals[9] = "SIGKILL"\n'> <' signals[11] = "SIGSEGV"\n'> <' signals[13] = "SIGPIPE"\n'> <' signals[14] = "SIGALRM"\n'> <' signals[15] = "SIGTERM"\n'> <' signals[10] = "SIGUSR1"\n'> <' signals[12] = "SIGUSR2"\n'> <' signals[17] = "SIGCHLD"\n'> <' signals[18] = "SIGCONT"\n'> <' signals[19] = "SIGSTOP"\n'> <' signals[20] = "SIGTSTP"\n'> <' signals[21] = "SIGTTIN"\n'> <' signals[22] = "SIGTTOU"\n'> <' }\n'> <'\n'> <' # common fields\n'> <' $1 != "#" {\n'> <' # task name can contain dashes\n'> <' comm = pid = $1\n'> <' sub(/-[0-9][0-9]*/, "", comm)\n'> <' if (opt_name && match(comm, name) == 0)\n'> <' next\n'> <' sub(/.*-/, "", pid)\n'> <' }\n'> <'\n'> <' # sys_kill() entry\n'> <' $1 != "#" && $(4+o) ~ /sys_kill/ && $(5+o) !~ /->/ {\n'> <' #\n'> <' # eg: ... sys_kill(pid:...\n'> <' #\n'> <' kpid = $(5+o)\n'> <' signal = $(7+o)\n'> <' sub(/,$/, "", kpid)\n'> <' sub(/\\)$/, "", signal)\n'> <' kpid = int("0x"kpid)\n'> <' signal = int("0x"signal)\n'> <' current[pid,"kpid"] = kpid\n'> <' current[pid,"signal"] = signal\n'> <' }\n'> <'\n'> <' # sys_kill exit\n'> <' $1 != "#" && $(5+o) ~ /->/ {\n'> <' rv = int($NF)\n'> <' killed_pid = current[pid,"kpid"]\n'> <' signal = current[pid,"signal"]\n'> <'\n'> <' delete current[pid,"kpid"]\n'> <' delete current[pid,"signal"]\n'> <'\n'> <' if(opt_pid && killed_pid != opt_pid) {\n'> <' next\n'> <' }\n'> <'\n'> <' if (opt_time) {\n'> <' time = $(3+o); sub(":", "", time)\n'> <' printf "%-16s ", time\n'> <' }\n'> <'\n'> <' if (opt_fancy) {\n'> <' if (signals[signal] != "") {\n'> <' signal = signals[signal]\n'> <' }\n'> <' }\n'> <'\n'> < ' printf "%-16.16s %-6s %-8s %-10s %-4s\\n", comm, pid, killed_pid, signal,\n' > <' rv\n'> <' }\n'> <'\n'> <' $0 ~ /LOST.*EVENTS/ { print "WARNING: " $0 > "/dev/stderr" }\n'> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Simple blame_tok:<end> more_env:[] words:[{<end>}] redirects:[] do_fork:T) ] )