GetEnv,
SetEnv,
UnsetEnv,
+ PID,
CharsBase64,
DevourWhitespace,
IsSTOEnabled,
&SystemClauseType::GetEnv => clause_name!("$getenv"),
&SystemClauseType::SetEnv => clause_name!("$setenv"),
&SystemClauseType::UnsetEnv => clause_name!("$unsetenv"),
+ &SystemClauseType::PID => clause_name!("$pid"),
&SystemClauseType::CharsBase64 => clause_name!("$chars_base64"),
&SystemClauseType::LoadLibraryAsStream => clause_name!("$load_library_as_stream"),
&SystemClauseType::DevourWhitespace => clause_name!("$devour_whitespace"),
("$getenv", 2) => Some(SystemClauseType::GetEnv),
("$setenv", 2) => Some(SystemClauseType::SetEnv),
("$unsetenv", 1) => Some(SystemClauseType::UnsetEnv),
+ ("$pid", 1) => Some(SystemClauseType::PID),
("$chars_base64", 4) => Some(SystemClauseType::CharsBase64),
("$load_library_as_stream", 3) => Some(SystemClauseType::LoadLibraryAsStream),
("$push_load_context", 2) => Some(SystemClauseType::REPL(REPLCodePtr::PushLoadContext)),
:- module(os, [getenv/2,
setenv/2,
- unsetenv/1]).
+ unsetenv/1,
+ pid/1]).
:- use_module(library(error)).
:- use_module(library(charsio)).
must_be_env_var(Key),
'$unsetenv'(Key).
+pid(PID) :-
+ can_be(integer, PID),
+ '$pid'(PID).
+
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
For now, we only support a restricted subset of variable names.
use std::num::NonZeroU32;
use std::ops::Sub;
use std::rc::Rc;
+use std::process;
use chrono::{offset::Local, DateTime};
use cpu_time::ProcessTime;
let key = self.heap_pstr_iter(self[temp_v!(1)]).to_string();
env::remove_var(key);
}
+ &SystemClauseType::PID => {
+ let a1 = self[temp_v!(1)];
+ let pid = process::id();
+ let addr = self.heap.put_constant(Constant::Integer(Rc::new(Integer::from(pid))));
+ (self.unify_fn)(self, a1, addr);
+ }
&SystemClauseType::CharsBase64 => {
let padding = self.atom_argument_to_string(3);
let charset = self.atom_argument_to_string(4);