#include <string.h> // strerror #include <fcntl.h> // O_RDWR #if defined(CYGWIN_NT) || defined(MINGW) || defined ( Linux ) || defined ( HP_UX ) || defined ( UNIX ) #include <iostream> // cout for debugging before release mode. using namespace std; // use cout instead of using std::cout #elif defined( SunOS) || defined ( AIX ) #include <iostream.h> // cout for debugging before release mode at other OS supporting iostream.h (AIX/SunOS). #else #error use iostream/iostream.h based on your OS #endif #include <stdlib.h> // exit #include <sys/errno.h> // errno #include <sys/wait.h> // wait #include <sys/stat.h> // umask #include <unistd.h> // fork #include <sys/signal.h> // signal system call int main() { // signal( SIGHUP, SIG_IGN); // We can include this if we feel to send a signal to running process // using kill system call to executing process id. signal( SIGTSTP, SIG_IGN); // Ignore terminal stop signals at background process. signal( SIGTERM, SIG_IGN); // Do not associate terminal to background process. signal( SIGTTIN, SIG_IGN); // Ignore terminal input terminal signals at background process. signal( SIGTTOU, SIG_IGN); // Ignore terminal output terminal signals at background process. close(0); // Close standard error => using system call close(1); // Close standard input => using system call close(2); // Close standard output => using system call signal( SIGCHLD, SIG_IGN); // Handle removing daemon process before making a fork. errno = 0; // Reset the errno global variable int pid = fork(); if( 0 != pid ) { exit(0); } wait(NULL); pid = fork(); /* * PID PARENT_PID PGID fork_Return Exit PROCESS_01 PID02 PID01 PGID_01 PID01 exit since 0 != pid PROCESS_02 PID03 PID02 PGID_02 0 PROCESS_02 wait for PROCESS_01 to be removed from process table: PROCESS_02 PID03 01 01 0 */ if( 0 != pid ) { exit(0); } wait(NULL); umask(0); // Reset inherited file creation mask setsid(); // run the program using new session. // Current Parent process id is 1 // cout << "PPID: " << getppid() << "\n"; // Execute checkbattery.sh if bash.exe background program is not running. int ret = system( "/usr/bin/ps -ea 2>&1 |\ /usr/bin/grep -E -v \"ps|grep|^$\" 2>&1 |\ /usr/bin/grep bash 2>&1 |\ /usr/bin/grep -w 1 >/dev/null 2>&1;\ Ret=$?;\ if [ 0 -ne $Ret ];\ then\ cd ~/;\ ./checkbattery.sh >/dev/null 2>&1 & \ fi;"); // cout << "System checkbattery.sh " << ret << "\n"; // putty.cmd having following content to open putty.exe at maximized option. // @ECHO OFF // START /B /MAX C:\Users\murugesan_openssl\putty.exe [email protected] // Start putty.exe after login by checking winlogon.exe at while loop using tasklist.exe. ret = system( "while [ 1 ];\ do\ /cygdrive/c/WINDOWS/system32/tasklist.exe 2>&1 | /usr/bin/tr -d \"\\r\" 2>&1 | /usr/bin/grep winlogon.exe >/dev/null 2>&1;\ Ret=$?;\ if [[ 0 -eq $Ret ]];\ then\ break;\ fi;\ done;\ /cygdrive/c/WINDOWS/system32/tasklist.exe 2>&1 |\ /usr/bin/tr -d \"\r\" 2>&1 |\ /usr/bin/grep -i putty.exe >/dev/null 2>&1;\ Ret=$?;\ if [ 0 -ne $Ret ];\ then\ cd ~/;\ ./putty.cmd & \ fi;"); cout << "System putty.cmd " << ret << "\n"; // open firefox.exe // cout << "start firefox\n"; ret = system( "while [ 1 ];\ do\ /usr/bin/ps -ea 2>&1 |\ /usr/bin/grep -E -v \"ps|grep|^$\" 2>&1 |\ /usr/bin/grep -w 1 >/dev/null 2>&1;\ Ret=$?;\ if [ 0 -ne $Ret ];\ then\ /cygdrive/c/WINDOWS/system32/tasklist.exe 2>&1 |\ /usr/bin/tr -d \"\r\" |\ /usr/bin/grep -E -v \"^$\" >/dev/null 2>&1;\ Ret=$?;\ fi;\ if [ 0 -eq $Ret ];\ then\ /cygdrive/c/WINDOWS/system32/tasklist.exe 2>&1 |\ /usr/bin/tr -d \"\r\" |\ /usr/bin/grep -E -v \"ps|grep|^$\" |\ /usr/bin/grep -i firefox >/dev/null 2>&1;\ Ret=$?;\ if [[ 0 -ne $Ret ]];\ then\ cd \"/cygdrive/c/PROGRA~1/MOZILL~1\";\ ./firefox.exe;\ fi;\ break;\ fi;\ done;"); // cout << "System firefox.exe " << ret << "\n"; return 0; } /* $ /usr/bin/make.exe $ /usr/bin/g++.exe -DCYGWIN_NT -g -Wall startup.cpp -o /cygdrive/c/Users/murugesan_openssl/AppData/Roaming/MICROS~1/Windows/STARTM~1/Programs/Startup/startup.exe $ #Use -std=c++11 /... based on your compiler/STL usage. $ /usr/bin/make /cygdrive/c/Users/murugesan_openssl/AppData/Roaming/MICROS~1/Windows/STARTM~1/Programs/Startup/startup.exe is up to date $ /usr/bin/touch.exe startup.cpp $ echo /usr/bin/g++ -D$(/usr/bin/uname -s | /usr/bin/sed "s/-[0-9].*.[0-9].*-[0-9].*//;") -g -Wall startup.cpp -o /cygdrive/c/Users/murugesan_openssl/AppData/Roaming/MICROS~1/Windows/STARTM~1/Programs/Startup/startup.exe /usr/bin/g++ -DCYGWIN_NT -g -Wall startup.cpp -o /cygdrive/c/Users/murugesan_openssl/AppData/Roaming/MICROS~1/Windows/STARTM~1/Programs/Startup/startup.exe $ /usr/bin/g++ -D$(/usr/bin/uname -s | /usr/bin/sed "s/-[0-9].*.[0-9].*-[0-9].*//;s/^\([A-Z][A-Z]\)-\([A-Z][A-Z]\)/\1_\2/;") -g -Wall startup.cpp -o /cygdrive/c/Users/murugesan_openssl/AppData/Roaming/MICROS~1/Windows/STARTM~1/Programs/Startup/startup.exe $ /usr/bin/make.exe /cygdrive/c/Users/murugesan_openssl/AppData/Roaming/MICROS~1/Windows/STARTM~1/Programs/Startup/startup.exe is up to date $ # Logout and relogin. $ #This program require following files: $ #a) ~/checkbattery.sh $ #b) ~/putty.cmd $ #c) "C:\\\\PROGRA~1\\\\MOZILL~1\\\\firefox.exe" OR /cygdrive/c/PROGRA~1/MOZILL~1/firefox.exe inside bash.exe/mksh.exe/sh.exe/available shells $ /usr/bin/cat "/home/murugesan_openssl/checkbattery.sh" #!/bin/bash #BatteryStatus 1 => Power is off POWEROFF=1 #BatteryStatus 2 => Power is on POWERON=2 SLEEPTIME=10 unset -f HANDLETASKMGR HANDLETASKMGR () { if [ "" = "$BATTERY_PERCENTAGE_AVAILABLE" ] then BATTERY_PERCENTAGE_AVAILABLE=$(/cygdrive/c/WINDOWS/System32/Wbem/WMIC.exe Path Win32_Battery Get EstimatedChargeRemaining 2>&1 |\ /usr/bin/awk '{ if ( 2 == NR ) { printf( "%d", substr( $1, 1, length( $0) -1 ) ); } }') fi if [ $BATTERY_PERCENTAGE_AVAILABLE -le 25 ] then CURRENTPOWERSTAT=$(/cygdrive/c/WINDOWS/System32/Wbem/WMIC.exe Path Win32_Battery Get BatteryStatus 2>&1 |\ /usr/bin/awk '{ if ( 2 == NR ) { printf( "%d", $1); } }') /cygdrive/c/Windows/System32/wbem/WMIC.exe Path Win32_Battery Get BatteryStatus 2>&1 | /usr/bin/tr -d "\r" | /usr/bin/grep 2 >/dev/null 2>&1 Ret=$? if [ 0 -eq $Ret ] then export POWER="ON" else export POWER="OFF" fi if [ $POWEROFF -eq $CURRENTPOWERSTAT ] then /cygdrive/c/WINDOWS/system32/taskkill.exe /f /im notepad.exe >/dev/null 2>&1 /cygdrive/c/WINDOWS/System32/Wbem/WMIC.exe Path Win32_Battery Get EstimatedChargeRemaining 2>&1 | /usr/bin/tr -d "\r" | /usr/bin/awk '2 == NR { printf( "ADD POWER PLUG\nBATTERY PERCENTAGE_01 %s%%\nPOWER IS %s", $1, ENVIRON["P OWER"] ); }' >/home/murugesan_openssl/PowerPercentage.txt /cygdrive/c/WINDOWS/system32/cmd.exe /c "start /max C:\\Windows\\System32\\notepad.exe C:\\Users\\murugesan_openssl\\cygwin_openssl\\home\\murugesan_openssl\\PowerPercentage.txt" >/dev/null 2>&1 & /usr/bin/touch /tmp/TASKMGR.txt SLEEPTIME=10 else if [ -f /tmp/TASKMGR.txt ] then /usr/bin/rm /tmp/TASKMGR.txt fi /cygdrive/c/WINDOWS/system32/taskkill.exe /f /im notepad.exe >/dev/null 2>&1 SLEEPTIME=60 return 1 fi elif [ $BATTERY_PERCENTAGE_AVAILABLE -ge 98 ] then CURRENTPOWERSTAT=$(/cygdrive/c/WINDOWS/System32/Wbem/WMIC.exe Path Win32_Battery Get BatteryStatus 2>&1 |\ /usr/bin/awk '{ if ( 2 == NR ) { printf( "%d", $1); } }') /cygdrive/c/Windows/System32/wbem/WMIC.exe Path Win32_Battery Get BatteryStatus 2>&1 | /usr/bin/tr -d "\r" | / usr/bin/grep 2 >/dev/null 2>&1 Ret=$? if [ 0 -eq $Ret ] then export POWER="ON" else export POWER="OFF" fi if [ $CURRENTPOWERSTAT -eq $POWERON ] then /cygdrive/c/WINDOWS/system32/taskkill.exe /f /im notepad.exe >/dev/null 2>&1 /cygdrive/c/WINDOWS/System32/Wbem/WMIC.exe Path Win32_Battery Get EstimatedChargeRemaining 2>&1 | /usr /bin/tr -d "\r" | /usr/bin/awk '2 == NR { printf( "REMOVE POWER PLUG\nBATTERY PERCENTAGE_02 %s%%\nPOWER IS %s", $1, ENVIRON["P OWER"] ); }' >/home/murugesan_openssl/PowerPercentage.txt /cygdrive/c/WINDOWS/system32/cmd.exe /c "start /max C:\\Windows\\System32\\notepad.exe C:\\Users\\Muru gesan\\cygwin_openssl\\home\\murugesan_openssl\\PowerPercentage.txt" >/dev/null 2>&1 & /usr/bin/touch /tmp/TASKMGR.txt SLEEPTIME=10 else if [ -f /tmp/TASKMGR.txt ] then /usr/bin/rm /tmp/TASKMGR.txt fi /cygdrive/c/WINDOWS/system32/taskkill.exe /f /im notepad.exe >/dev/null 2>&1 SLEEPTIME=60 return 1 fi fi } while [ 1 ] do BATTERY_PERCENTAGE_AVAILABLE=$(/cygdrive/c/Windows/System32/wbem/WMIC.exe Path Win32_Battery Get EstimatedChargeRemain ing 2>&1 |\ /usr/bin/awk '{ if ( 2 == NR ) { printf( "%d", $1); } }') if [ $BATTERY_PERCENTAGE_AVAILABLE -le 25 ] then CURRENTPOWERSTAT=$(/cygdrive/c/WINDOWS/System32/Wbem/WMIC.exe Path Win32_Battery Get BatteryStatus 2>&1 |\ /usr/bin/awk '{ if ( 2 == NR ) { printf( "%d", $1); } }') if [ $CURRENTPOWERSTAT -eq $POWEROFF ] then /cygdrive/c/Windows/System32/wbem/WMIC.exe Path Win32_Battery Get BatteryStatus 2>&1 | /usr/bin/tr -d "\r" | /usr/bin/grep 2 >/dev/null 2>&1 Ret=$? if [ 0 -eq $Ret ] then export POWER="ON" else export POWER="OFF" fi /cygdrive/c/WINDOWS/system32/taskkill.exe /f /im notepad.exe >/dev/null 2>&1 /cygdrive/c/WINDOWS/System32/Wbem/WMIC.exe Path Win32_Battery Get EstimatedChargeRemaining 2>&1 | /usr /bin/tr -d "\r" | /usr/bin/awk '2 == NR { printf( "BATTERY PERCENTAGE_03 %s%%\nPOWER IS %s\n", $1, ENVIRON["POWER"] ); }' >/ho me/murugesan_openssl/PowerPercentage.txt /cygdrive/c/WINDOWS/system32/cmd.exe /c "start /max C:\\Windows\\System32\\notepad.exe C:\\Users\\Muru gesan\\cygwin_openssl\\home\\murugesan_openssl\\PowerPercentage.txt" >/dev/null 2>&1 & /usr/bin/touch /tmp/TASKMGR.txt SLEEPTIME=10 else if [ -f /tmp/TASKMGR.txt ] then /usr/bin/rm /tmp/TASKMGR.txt fi /cygdrive/c/WINDOWS/system32/taskkill.exe /f /im notepad.exe >/dev/null 2>&1 & SLEEPTIME=60 continue fi elif [ $BATTERY_PERCENTAGE_AVAILABLE -ge 98 ] then CURRENTPOWERSTAT=$(/cygdrive/c/WINDOWS/System32/Wbem/WMIC.exe Path Win32_Battery Get BatteryStatus 2>&1 |\ /usr/bin/awk '{ if ( 2 == NR ) { printf( "%d", $1); } }') if [ $CURRENTPOWERSTAT -eq $POWERON ] then /cygdrive/c/Windows/System32/wbem/WMIC.exe Path Win32_Battery Get BatteryStatus 2>&1 | /usr/bin/tr -d "\r" | /usr/bin/grep 2 >/dev/null 2>&1 Ret=$? if [ 0 -eq $Ret ] then export POWER="ON" else export POWER="OFF" fi /cygdrive/c/WINDOWS/system32/taskkill.exe /f /im notepad.exe >/dev/null 2>&1 /cygdrive/c/WINDOWS/System32/Wbem/WMIC.exe Path Win32_Battery Get EstimatedChargeRemaining 2>&1 | /usr /bin/tr -d "\r" | /usr/bin/awk '2 == NR { printf( "BATTERY PERCENTAGE_04 %s%%\nPOWER IS %s\n", $1, ENVIRON["POWER"] ); }' >/ho me/murugesan_openssl/PowerPercentage.txt /cygdrive/c/WINDOWS/system32/cmd.exe /c "start /max C:\\Windows\\System32\\notepad.exe C:\\Users\\Muru gesan\\cygwin_openssl\\home\\murugesan_openssl\\PowerPercentage.txt" >/dev/null 2>&1 & /usr/bin/touch /tmp/TASKMGR.txt SLEEPTIME=10 else if [ -f /tmp/TASKMGR.txt ] then /usr/bin/rm /tmp/TASKMGR.txt fi /cygdrive/c/WINDOWS/system32/taskkill.exe /f /im notepad.exe >/dev/null 2>&1 & SLEEPTIME=60 continue fi fi for ONSECOND in {1..5} do HANDLETASKMGR Ret=$? if [ 1 -eq $Ret ] then break fi if [ -d /cygdrive/c/Users/murugesan_openssl/AppData/Local/Adobe ] then /usr/bin/rm -rf /cygdrive/c/Users/murugesan_openssl/AppData/Local/Adobe >/dev/null 2>&1 & fi if [ -f /cygdrive/c/Users/murugesan_openssl/AppData/Local/PUTTY.RND ] then /usr/bin/rm -f /cygdrive/c/Users/murugesan_openssl/AppData/Local/PUTTY.RND >/dev/null 2>&1 & fi /cygdrive/c/Windows/System32/reg.exe query "HKCU\Software\Microsoft\CTF\LangBar" 2>&1 |\ /usr/bin/tr -d "\r" 2>&1 |\ /usr/bin/grep "ShowStatus" 2>&1 |\ /usr/bin/grep "0x4" >/dev/null 2>&1 Ret=$? if [ 0 -ne $Ret ] then /cygdrive/c/Windows/System32/reg.exe add "HKCU\Software\Microsoft\CTF\LangBar" /f /v ShowStatus /t REG _DWORD /d 4 >/dev/null 2>&1 echo Yes | /cygdrive/c/Windows/System32/reg.exe add "HKCU\Software\Microsoft\CTF\LangBar" /f /v ShowSt atus /t REG_DWORD /d 4 >/dev/null 2>&1 fi /usr/bin/sleep $SLEEPTIME done done $ /usr/bin/cat.exe "/home/murugesan_openssl/Din_Back/putty.cmd" @ECHO OFF START /B /MAX C:\Users\murugesan_openssl\cygwin_openssl\home\murugesan_openssl\putty.exe [email protected] */ |