From swi-prolog version of process module:
process_release(+PID)
Release process handle. In this implementation this is the same as process_wait(PID, _).
in swi-prolog:
?- process_create(path(true), [], [process(P)]), process_wait(P, R), process_id(P, ID).
P = ID, ID = 337330,
R = exit(0).
?- process_create(path(true), [], [process(P)]), process_release(P), process_id(P, ID).
P = ID, ID = 337333.
in scryer:
?- process_create("true", [], [process(P)]), process_wait(P, R), process_id(P, ID).
P = '$process'(337810), R = exit(0), ID = 337810.
?- process_create("true", [], [process(P)]), process_release(P), process_id(P, ID).
error(existence_error(process,'$dropped_value'),[predicate-process_id/2|process_id/2]).
I think process_wait/2 should do all the cleanup. Also, is there any reason to wrap a process in a custom struct? Why not just pass the process id around like swi does it?
From swi-prolog version of process module:
in swi-prolog:
in scryer:
?- process_create("true", [], [process(P)]), process_wait(P, R), process_id(P, ID). P = '$process'(337810), R = exit(0), ID = 337810. ?- process_create("true", [], [process(P)]), process_release(P), process_id(P, ID). error(existence_error(process,'$dropped_value'),[predicate-process_id/2|process_id/2]).I think
process_wait/2should do all the cleanup. Also, is there any reason to wrap a process in a custom struct? Why not just pass the process id around like swi does it?