The pid and the start time pair serves as the identifier of the process, as process ids might be reused, but the chance of starting two processes with identical ids within the resolution of the timer is minimal.
ps_create_time(p = ps_handle())POSIXct object, start time, in GMT.
This function works even if the process has already finished.
Other process handle functions:
ps_children(),
ps_cmdline(),
ps_connections(),
ps_cpu_times(),
ps_cwd(),
ps_descent(),
ps_environ(),
ps_exe(),
ps_handle(),
ps_interrupt(),
ps_is_running(),
ps_kill(),
ps_memory_info(),
ps_name(),
ps_num_fds(),
ps_num_threads(),
ps_open_files(),
ps_pid(),
ps_ppid(),
ps_resume(),
ps_send_signal(),
ps_shared_libs(),
ps_status(),
ps_suspend(),
ps_terminal(),
ps_terminate(),
ps_uids(),
ps_username()
p <- ps_handle()
p
#> <ps::ps_handle> PID=4139632, NAME=R, AT=2025-10-29 18:06:27.39
ps_create_time(p)
#> [1] "2025-10-29 18:06:27 GMT"