Hi,

Rather than shell() you can use open process in LiveCode to have the process 
run asynchronously, get PIDs to monitor progress and kill processes at a time 
point.  I had a vague idea of how this worked in theory.  But, instead of 
relying on my rusty brain I opened my trusty ChatGPT (5.6 sol light) and trying 
a few different prompts in order to fully understand the process it produced 
something that I understand and I think should do what you want. Here is a 
list-server friendly summary I asked ChatGPT to make of a much longer chat.

ChatGPT 
//////./////.//////./////.//////./////.//////./////.//////./////.//////./////.//////./////.//////./////.//////./////.//////./////.//////./////.//////./////.

This is possible, but a shell process cannot directly call a LiveCode handler. 
It must communicate its progress and final result back through something 
LiveCode can monitor, such as stdout, a status file, or a localhost socket. 
LiveCode then turns that event into a callback message.

The shell() function is synchronous, so calling a long-running command with 
shell() will block LiveCode. It can still be used briefly to launch a properly 
detached background process and obtain its PID, provided all of the process’s 
standard streams are redirected.

The open process command is another possibility. Unlike shell(), open process 
starts a process and returns immediately. It can open the process for reading, 
writing, both, or neither. LiveCode can also inspect openProcesses and 
openProcessIDs. However, open process does not provide an automatic completion 
callback, and support for Unix command-line processes on macOS is limited.

A practical cross-platform design would be:

LiveCode starts a detached worker and records its PID.
The worker writes progress messages to a file or local socket.
LiveCode uses “send monitorJob to me in 100 milliseconds” to check progress 
without blocking the UI.
A launcher or watchdog enforces the time limit and terminates the worker if 
necessary.
The worker or launcher writes a final status such as success, error, or 
timeout, together with the exit code and message.
The LiveCode monitor handler dispatches the appropriate success or error 
callback.
For example, the final status might be:

success,0,Completed

error,17,Could not open input file

timeout,124,Process exceeded its time limit

The LiveCode monitoring handler would read that status and dispatch something 
such as jobSucceeded or jobFailed. Therefore, the “callback” is generated by 
LiveCode after it receives the process result; it is not a direct call from the 
shell process.

For simple and reliable jobs, I would use progress and status files. For 
frequent or immediate updates, a localhost socket is more event-driven. Reading 
stdout from an open process can also work, but care is needed because a read 
can block if no output is available, and the child process may buffer its 
output.

This is similar to the behavior exposed by tsNet, although tsNet implements its 
asynchronous work and callbacks inside an external library.

\\\\\.\\\\\\.\\\\\\\\.\\\\\\.\\\\\.\\\\\\.\\\\\.\\\\\\.\\\\\.\\\\\\.\\\\\.\\\\\\.\\\\\.\\\\\\.\\\\\.\\\\\\.\\\\\.\\\\\\.\\\\\.\\\\\\.\\\\\.\\\\\\.\\\\\.\\\\\\.\\\\\\.ChatGPT

If you are interested in the full chat which includes code to implement the 
ideas above using Windows( as Ben asked) and a fuller exposition of the 
concepts I can upload the full chat where ever you think is best.  (I am pretty 
sure I can't send it through the use-LiveCode list.)

WARNING: I have not tested this idea out. ChatGPT is fairly good with LiveCode 
and pretty solid at creating shell code but it does make syntax errors in 
LiveCode at times. I have added rules in my ChatGPT memory to catch some common 
ones I have come across e.g. it makes up weird ways to end up repeat blocks.  
Correcting it in the chat never had a lasting effect. For example, It would 
pick random ways from other programming languages. I had to explicitly ask it 
to commit the correct LiveCode way to create repeat loops to memory.  

Martin

> On Aug 27, 2026, at 11:22 AM, Ben Rubinstein via use-livecode 
> <[email protected]> wrote:
> 
> Thanks Bob; but I was hoping to do this in LiveCode.
> 
> e.g. is there a way to invoke a shell command to run asynchronously, 
> returning the PID to LiveCode so that it can be monitored?
> 
> 
> On 26/08/2026 16:26, Bob Sneidar via use-livecode wrote:
>> <https://superuser.com/questions/520527/windows-command-line-time-limit>
>> superuser.com<https://superuser.com/questions/520527/windows-command-line-time-limit>
>> [X]<https://superuser.com/questions/520527/windows-command-line-time-limit>
>> I just googled it.
>> Bob S
>> On Aug 26, 2026, at 02:07, Ben Rubinstein via use-livecode 
>> <[email protected]> wrote:
>> Hello hive mind,
>> Is there a way from LiveCode to invoke a shell command with a time limit, to 
>> force it to fail after a certain time? (This is on Windows.)
>> many thanks,
>> Ben
> 
> _______________________________________________
> use-livecode mailing list
> [email protected]
> Please visit this url to subscribe, unsubscribe and manage your subscription 
> preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode

_______________________________________________
use-livecode mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to