ZetCode

Tcl pid Command

last modified April 3, 2025

The Tcl pid command returns the process ID of the current process or a specified process. Process IDs are unique numbers assigned by the operating system to running processes.

Basic Definition

The pid command with no arguments returns the process ID of the current Tcl interpreter. With an argument, it returns the ID of a channel's process.

Syntax: pid ?channelId?. The channelId is optional and refers to a command pipeline created with open or exec.

Getting Current Process ID

This example shows the simplest usage of pid to get the current process ID.

basic_pid.tcl
set current_pid [pid]
puts "Current process ID: $current_pid"

This retrieves and prints the process ID of the running Tcl interpreter. The ID will be different each time the script runs.

Getting Process ID of a Pipeline

When working with command pipelines, pid can return the process ID of the external command.

pid_pipeline.tcl
set pipeline [open "|ls -l"]
set ls_pid [pid $pipeline]
puts "ls command PID: $ls_pid"
close $pipeline

This creates a pipeline to run the ls -l command and gets its process ID. Always remember to close pipelines when done.

Comparing Process IDs

You can compare process IDs to determine if two commands run in the same process.

pid_compare.tcl
set pid1 [pid]
set pid2 [pid]
if {$pid1 == $pid2} {
    puts "Both PIDs are the same (same process)"
} else {
    puts "Different processes"
}

This demonstrates that multiple pid calls in the same process return the same value. The comparison will always be true in this case.

Using pid with exec

When using exec with background processes, pid can track the child process.

pid_exec.tcl
set channel [exec sleep 10 &]
set child_pid [pid $channel]
puts "Child process PID: $child_pid"
close $channel

This runs sleep in the background and gets its process ID. The & makes the command run in the background.

Process ID in File Operations

Process IDs can be useful when working with temporary files to create unique names.

pid_file.tcl
set tempfile "/tmp/temp_[pid].txt"
set fd [open $tempfile w]
puts $fd "Temporary data"
close $fd
puts "Created temporary file: $tempfile"

This creates a temporary file with the process ID in its name, ensuring uniqueness. The file is opened, written to, and then closed.

Monitoring Process Completion

Process IDs can be used to monitor when external processes complete.

pid_monitor.tcl
set channel [open "|sleep 5"]
set process_id [pid $channel]
puts "Waiting for process $process_id to complete..."
close $channel
puts "Process completed"

This starts a sleep command and waits for it to finish. The close blocks until the process completes.

Best Practices

This tutorial covered the Tcl pid command with practical examples showing its usage in different scenarios.

Author

My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.

List all Tcl Tutorials.