File: process_by_pid.exp

package info (click to toggle)
systemtap 5.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 47,556 kB
  • sloc: cpp: 81,117; ansic: 54,933; xml: 49,795; exp: 43,595; sh: 11,526; python: 5,003; perl: 2,252; tcl: 1,312; makefile: 1,006; javascript: 149; lisp: 105; awk: 101; asm: 91; java: 70; sed: 16
file content (62 lines) | stat: -rw-r--r-- 1,907 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
set test_name "process_by_pid"

if {! [installtest_p]} {
    untested $test_name
    return
}

# building the test program
set compile_result [target_compile $srcdir/$subdir/$test_name.c ./$test_name executable "additional_flags=-g [sdt_includes]"]

proc sleep_twenty_secs {} {
    wait_n_secs 20;
    return 0;
}

# expected output
set output_string "pass\r\n"

# running multiple instances of the test program
# the idea behind this is that in the stap script, it will check the pid it is
# probing against the one that we told it to probe. if all goes well, then we
# know that process(PID).* probes will probe processes based on their PID and
# not the program it is runnning.
set pid1 [exec ./$test_name &]
set pid2 [exec ./$test_name &]
set pid3 [exec ./$test_name &]

# There are two different versions of the test script. One for
# platforms that support .plt probes (process_by_pid.stp) and one for
# platforms that don't support .plt probes
# (process_by_pid_no_plt.stp).
if {[plt_probes_p]} {
    set test_script "${test_name}.stp"
} else {
    set test_script "${test_name}_no_plt.stp"
}

# running the script
foreach runtime [get_runtime_list] {
    verbose -log "starting the stap script"
    if {$runtime != ""} {
        if {$runtime == "dyninst"} {
            # PR17352 (dyninst: process probes require a target -c/-x)
            setup_kfail 17352 "*-*-*"
        }
        set cur_test_name "$test_name ($runtime)"
        stap_run $cur_test_name sleep_twenty_secs $output_string --runtime=$runtime $srcdir/$subdir/${test_script} $pid2
    } elseif {[uprobes_p]} {
        stap_run $test_name sleep_twenty_secs $output_string $srcdir/$subdir/${test_script} $pid2        
    } else {
        untested $test_name
        continue
    }
}

# kill all the instances of the test program.
kill -INT $pid1 2
kill -INT $pid2 2
kill -INT $pid3 2

# remove the executable
exec rm -f ./$test_name