<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://95.179.246.60/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Run_a_program_with_CommandShell</id>
	<title>Run a program with CommandShell - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://95.179.246.60/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Run_a_program_with_CommandShell"/>
	<link rel="alternate" type="text/html" href="http://95.179.246.60/mediawiki/index.php?title=Run_a_program_with_CommandShell&amp;action=history"/>
	<updated>2026-05-08T12:41:46Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>http://95.179.246.60/mediawiki/index.php?title=Run_a_program_with_CommandShell&amp;diff=175&amp;oldid=prev</id>
		<title>Nmingott: importing material</title>
		<link rel="alternate" type="text/html" href="http://95.179.246.60/mediawiki/index.php?title=Run_a_program_with_CommandShell&amp;diff=175&amp;oldid=prev"/>
		<updated>2025-05-12T20:37:00Z</updated>

		<summary type="html">&lt;p&gt;importing material&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;SUPER GOTCHA&amp;#039;&amp;#039;&amp;#039;. &amp;#039;&amp;#039;&amp;#039;PipeableOSProcess&amp;#039;&amp;#039;&amp;#039; is extremely handy, but also, extremely dangerous. Remember to &amp;#039;&amp;#039;&amp;#039;close the pipes&amp;#039;&amp;#039;&amp;#039; after using it, as shown in the examples below, or sooner or later your program will crash. Keep checked your open pipes with &amp;lt;code&amp;gt;$&amp;gt; sudo lsof | grep squeak | grep pipe&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SUPER GOTCHA&amp;#039;&amp;#039;&amp;#039;. I have very bad surprises running PipeableOSProcess in a &amp;#039;&amp;#039;&amp;#039;secondary process&amp;#039;&amp;#039;&amp;#039;. If you kill the process and a PipeableOSProcess is running you may loose control of the image. If found OSProcess to be more resilient so I recommend you use that, even if it is more wordy to control.&lt;br /&gt;
&lt;br /&gt;
 Feature require: &amp;#039;CommandShell&amp;#039;.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Problem&amp;#039;&amp;#039;&amp;#039;. I want to know how much free space I still have in my disks. This is half done&lt;br /&gt;
&lt;br /&gt;
if I know that in Linux I can get that info with &amp;lt;code&amp;gt;df -h&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Solution-1&amp;#039;&amp;#039;&amp;#039;. This is the easiest solution.&lt;br /&gt;
** +] Quite short to type in&lt;br /&gt;
** +/-] It is &amp;#039;&amp;#039;&amp;#039;synchronous&amp;#039;&amp;#039;&amp;#039; with your code. This can be good and bad. When this commands end, the commands after it get executed. For the bad part read on.&lt;br /&gt;
** -] It your program to run takes a long time your Cuis is going to &amp;#039;&amp;#039;&amp;#039;lock&amp;#039;&amp;#039;&amp;#039; untill it has finished.&lt;br /&gt;
** NOTE. This example uses a new interface functions introduced in 2021.&lt;br /&gt;
&lt;br /&gt;
 p _ PipeableOSProcess waitForCommand: &amp;#039;uname -a &amp;#039; .&lt;br /&gt;
 p exitCode .         &amp;quot;=&amp;gt;  0 &amp;quot;&lt;br /&gt;
 p outputAndError .   &amp;quot;=&amp;gt; #(&amp;#039;Linux deb4 5.10.0-9-amd64 #1 SMP Debian 5.10.70-1 (2021-09-30) x86_64 GNU/Linux&lt;br /&gt;
 &amp;#039; &amp;lt;nowiki&amp;gt;&amp;#039;&amp;#039;&amp;lt;/nowiki&amp;gt;) &amp;quot;&lt;br /&gt;
 p closePipes.&lt;br /&gt;
 p close. &lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Solution-2&amp;#039;&amp;#039;&amp;#039;. As before but async&lt;br /&gt;
** +] This way does &amp;#039;&amp;#039;&amp;#039;not lock&amp;#039;&amp;#039;&amp;#039; you system&lt;br /&gt;
** -] You must check when execution ends yourself&lt;br /&gt;
&lt;br /&gt;
 p _ PipeableOSProcess command: &amp;#039;df -h&amp;#039;.&lt;br /&gt;
 out _ p output . &amp;quot; store the output somewhere, you can do it only once. &amp;quot;&lt;br /&gt;
 p processProxy pid. &amp;quot;=&amp;gt; 112011 &amp;quot;&lt;br /&gt;
 p processProxy exitCode. &amp;quot;=&amp;gt; 0 &amp;quot;&lt;br /&gt;
 p closePipes.&lt;br /&gt;
 p close.&lt;br /&gt;
 out. &amp;quot;Ctrl+p, see the output&amp;quot;&lt;br /&gt;
 &amp;quot;=&amp;gt;&lt;br /&gt;
 &amp;#039;Filesystem Size Used Avail Use% Mounted on&lt;br /&gt;
 udev 5.1G 0 5.1G 0% /dev&lt;br /&gt;
 tmpfs 1.1G 18M 1.1G 2% /run&lt;br /&gt;
 /dev/sda2 93G 80G 8.1G 91% /&lt;br /&gt;
 tmpfs 5.2G 745M 4.4G 15% /dev/shm&lt;br /&gt;
 tmpfs 5.0M 4.0K 5.0M 1% /run/lock&lt;br /&gt;
 tmpfs 5.2G 0 5.2G 0% /sys/fs/cgroup&lt;br /&gt;
 /dev/sda1 511M 3.3M 508M 1% /boot/efi&lt;br /&gt;
 //nas.borghi.lan/sambaDisk/DiscoS/ 5.5T 3.8T 1.7T 70% /mnt/discoR&lt;br /&gt;
 //backup.borghi.lan/backupDisk/ 22T 7.1T 15T 34% /mnt/discoBackup&lt;br /&gt;
 tmpfs 1.1G 28K 1.1G 1% /run/user/1000&lt;br /&gt;
 vmhgfs-fuse 1.9T 588G 1.3T 32% /mnt/macos&lt;br /&gt;
 vmhgfs-fuse 1.9T 588G 1.3T 32% /mnt/dropbox&lt;br /&gt;
 &amp;#039; &amp;quot;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exercise-1&amp;#039;&amp;#039;&amp;#039;. Get your Linux kernel version. Google around to discover the appropriate shell command.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exercise-2&amp;#039;&amp;#039;&amp;#039;. Inspect the content of variable &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt;, you will see other interesting stuff there.&lt;br /&gt;
----NM 06-Sep-2021. Cuis version...&lt;/div&gt;</summary>
		<author><name>Nmingott</name></author>
	</entry>
</feed>