Avsluta process/program i Raspbian
- tecno
- Inlägg: 27039
- Blev medlem: 6 september 2004, 17:34:45
- Skype: tecnobs
- Ort: Sparreholm, Södermanland N 59° 4.134', E 16° 49.743'
- Kontakt:
Re: Avsluta process/program i Raspbian
Kanske denna sidan kan reda ut lite command line grejer för dig
https://www.raspberrypi.org/documentati ... ommands.md
https://www.raspberrypi.org/documentati ... ommands.md
- Klas-Kenny
- Inlägg: 11342
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: Avsluta process/program i Raspbian
Magnus_K skrev:Det jag fortfarande är genuint kass på är att få till alla argument rätt i terminalen när man tex ska kompilera, köra, kopiera, radera etc etc, men det kommer väl med tiden.
Så är det, det blir bättre med tiden.
Sen handlar mycket också om att lära sig att läsa och tolka funktionernas hjälptexter (typiskt kommando -h eller kommando --help), och manualen (man kommando, om man sitter på ett system med manualen installerad, annars samma sak skrivet i google).
Re: Avsluta process/program i Raspbian
Det tar sin tid, men du kan få rätt mycket hjälp här på forumet
Jag själv har jobbat med linux sista 20 år, så en del av saker man tar för givet eftersom de sitter i ryggmärgen, men skriv gärna när du behöver något hjälp.
Bli försiktigt med sudo, den kan bli både hjälpsam och skadligt, så använd den bara när du måste.
För att få alla argument till kommando du ska använda, använd kommando_namn --help, du borde få allt där, sen om det räcker inte, då är det man kommando_namn som du ska kolla nästa, där du har manual för den kommando du vill ha och sen om det hjälper inte heller, hojta till här så vi hjälper dig
Jag själv har jobbat med linux sista 20 år, så en del av saker man tar för givet eftersom de sitter i ryggmärgen, men skriv gärna när du behöver något hjälp.
Bli försiktigt med sudo, den kan bli både hjälpsam och skadligt, så använd den bara när du måste.
För att få alla argument till kommando du ska använda, använd kommando_namn --help, du borde få allt där, sen om det räcker inte, då är det man kommando_namn som du ska kolla nästa, där du har manual för den kommando du vill ha och sen om det hjälper inte heller, hojta till här så vi hjälper dig
Re: Avsluta process/program i Raspbian
När det gäller cd .. är det mycket riktigt mellanslaget som linux kräver men Windows struntar i.
Jag tycker att det är bra att förklara varför när man säger åt nån att "då ska du köra xxx istället". Jag hatar när det är guider som bara rabblar upp en massa kommandon utan att förklara nyttan med dem.
Sidan som tecno länkar till ser ut att vara rätt bra.
Jag tycker att det är bra att förklara varför när man säger åt nån att "då ska du köra xxx istället". Jag hatar när det är guider som bara rabblar upp en massa kommandon utan att förklara nyttan med dem.
Sidan som tecno länkar till ser ut att vara rätt bra.
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: Avsluta process/program i Raspbian
Super med all support!
Jag ska inte tjata ihjäl er med dumheter, men som exempel så händer följande rätt ofta, och jag blir då helt handlingsförlamad:
"Någon guide" på nätet skriver att man ska köra följande kommando för att få önskat resultat:
sudo g++ -lwiringPi TX_Demo.cpp cc1100_raspi.cpp -o TX_Demo
Visst fungerar det kanon, men jag vill veta mer.
Det jag vet är följande:
Det finns ingen man-fil för g++ men en hjälp, den ser ut som nedan.
Om jag minns rätt så läste jag någonstans att man ska sätta ett "l" före wiringPi om man använder det, men hur kommer det in i bilden över huvudtaget? Vad gör också filen cc1100_raspi.cpp i det här kommandot? (det är en fil i mappen som mycket riktigt heter så men försöker förstå lite mer)
Jag ska inte tjata ihjäl er med dumheter, men som exempel så händer följande rätt ofta, och jag blir då helt handlingsförlamad:
"Någon guide" på nätet skriver att man ska köra följande kommando för att få önskat resultat:
sudo g++ -lwiringPi TX_Demo.cpp cc1100_raspi.cpp -o TX_Demo
Visst fungerar det kanon, men jag vill veta mer.
Det jag vet är följande:
- * Mest troligt måste köra det som superuser,
* använda mig av kompilatorn g++,
* filen som ska kompileras är TX_Demo.cpp,
* och den körbara filen ska heta TX_Demo.
Det finns ingen man-fil för g++ men en hjälp, den ser ut som nedan.
Om jag minns rätt så läste jag någonstans att man ska sätta ett "l" före wiringPi om man använder det, men hur kommer det in i bilden över huvudtaget? Vad gör också filen cc1100_raspi.cpp i det här kommandot? (det är en fil i mappen som mycket riktigt heter så men försöker förstå lite mer)
Kod: Markera allt
Usage: g++ [options] file...
Options:
-pass-exit-codes Exit with highest error code from a phase.
--help Display this information.
--target-help Display target specific command line options.
--help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...].
Display specific types of command line options.
(Use '-v --help' to display command line options of sub-processes).
--version Display compiler version information.
-dumpspecs Display all of the built in spec strings.
-dumpversion Display the version of the compiler.
-dumpmachine Display the compiler's target processor.
-print-search-dirs Display the directories in the compiler's search path.
-print-libgcc-file-name Display the name of the compiler's companion library.
-print-file-name=<lib> Display the full path to library <lib>.
-print-prog-name=<prog> Display the full path to compiler component <prog>.
-print-multiarch Display the target's normalized GNU triplet, used as
a component in the library path.
-print-multi-directory Display the root directory for versions of libgcc.
-print-multi-lib Display the mapping between command line options and
multiple library search directories.
-print-multi-os-directory Display the relative path to OS libraries.
-print-sysroot Display the target libraries directory.
-print-sysroot-headers-suffix Display the sysroot suffix used to find headers.
-Wa,<options> Pass comma-separated <options> on to the assembler.
-Wp,<options> Pass comma-separated <options> on to the preprocessor.
-Wl,<options> Pass comma-separated <options> on to the linker.
-Xassembler <arg> Pass <arg> on to the assembler.
-Xpreprocessor <arg> Pass <arg> on to the preprocessor.
-Xlinker <arg> Pass <arg> on to the linker.
-save-temps Do not delete intermediate files.
-save-temps=<arg> Do not delete intermediate files.
-no-canonical-prefixes Do not canonicalize paths when building relative
prefixes to other gcc components.
-pipe Use pipes rather than intermediate files.
-time Time the execution of each subprocess.
-specs=<file> Override built-in specs with the contents of <file>.
-std=<standard> Assume that the input sources are for <standard>.
--sysroot=<directory> Use <directory> as the root directory for headers
and libraries.
-B <directory> Add <directory> to the compiler's search paths.
-v Display the programs invoked by the compiler.
-### Like -v but options quoted and commands not executed.
-E Preprocess only; do not compile, assemble or link.
-S Compile only; do not assemble or link.
-c Compile and assemble, but do not link.
-o <file> Place the output into <file>.
-pie Create a position independent executable.
-shared Create a shared library.
-x <language> Specify the language of the following input files.
Permissible languages include: c c++ assembler none
'none' means revert to the default behavior of
guessing the language based on the file's extension.
Options starting with -g, -f, -m, -O, -W, or --param are automatically
passed on to the various sub-processes invoked by g++. In order to pass
other options on to these processes the -W<letter> options must be used.
For bug reporting instructions, please see:
<file:///usr/share/doc/gcc-6/README.Bugs>.
Re: Avsluta process/program i Raspbian
Du behöver inte köra som sudo så länge du inte installerar kompilerade programm till någon systemmapp som /usr/bin, /sbin, osv.
Rästen du har fattat bra, -o är namn på output programm, cc1100_raspi.cpp är källkod fil, c++ fil.
lwiringpi betyder använd library wiringpi som är GPIO Interface library for the Raspberry Pi
Rästen du har fattat bra, -o är namn på output programm, cc1100_raspi.cpp är källkod fil, c++ fil.
lwiringpi betyder använd library wiringpi som är GPIO Interface library for the Raspberry Pi
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: Avsluta process/program i Raspbian
Ahaa ok. Nu har jag i och för sig inte testat utan sudo än, men ska försöka att alltid börja utan för att inte ställa till med något.
Men om cc1100_raspi.cpp är källkods-filen som ska kompileras, hur kommer då TX_Demo.cpp in i bilden? det känns som att det är en C++ fil för mycket med i kommandot?
l = library
Men om cc1100_raspi.cpp är källkods-filen som ska kompileras, hur kommer då TX_Demo.cpp in i bilden? det känns som att det är en C++ fil för mycket med i kommandot?
l = library
Re: Avsluta process/program i Raspbian
Nej bägge ska nog med, cc1100_raspi.cpp är sannolikt kod för radion och TX_Demo.cpp kod för "programmet" som använder sig av den första.
Re: Avsluta process/program i Raspbian
Finns så klart massor av beskrivning ar av GCC/G++ process för kompilering/länkning,
men denna var en tidig träff och verkar ganska vettig:
https://www3.ntu.edu.sg/home/ehchua/pro ... _make.html
Där finns även en enkel (kanske förenklad, men i alla fall) bild av processen:
> det känns som att det är en C++ fil för mycket med i kommandot?
Du kan ha hur många källkodsfiler som du vill/behöver i kommandot.
Men normalt så hade jag kanske förväntat att cc1100_raspi hade varit
förkompilerad som en "library" (och alltså inkluderar med -l), men det
kanske finns någon anledning till att den kompileras varje gång.
TX_Demo.cpp bör vara det som är din "applikation". Inte cc1100_raspi,
det är bara olika funktioner till CC1100 modulen. Se även:
https://github.com/SpaceTeddy/CC1101/bl ... _raspi.cpp
"CC1100 Raspberry Pi Library". Det är alltså ett "bibliotek" med rutiner för
CC1100, även om det rent tekniskt inte hanteras som ett "library"...
men denna var en tidig träff och verkar ganska vettig:
https://www3.ntu.edu.sg/home/ehchua/pro ... _make.html
Där finns även en enkel (kanske förenklad, men i alla fall) bild av processen:
> det känns som att det är en C++ fil för mycket med i kommandot?
Du kan ha hur många källkodsfiler som du vill/behöver i kommandot.
Men normalt så hade jag kanske förväntat att cc1100_raspi hade varit
förkompilerad som en "library" (och alltså inkluderar med -l), men det
kanske finns någon anledning till att den kompileras varje gång.
TX_Demo.cpp bör vara det som är din "applikation". Inte cc1100_raspi,
det är bara olika funktioner till CC1100 modulen. Se även:
https://github.com/SpaceTeddy/CC1101/bl ... _raspi.cpp
"CC1100 Raspberry Pi Library". Det är alltså ett "bibliotek" med rutiner för
CC1100, även om det rent tekniskt inte hanteras som ett "library"...
Re: Avsluta process/program i Raspbian
När du kör kommandot som root (med sudo) så skapas filen TX_Demo med ägare root - skriv 'ls -l' så ser du att filen ägs av root. Om du sedan försöker köra kommandot som din vanliga användare (utan sudo) så kommer det inte att ha rättighet att skriva över (ersätta) den tidigare skapta root-ägda filen och du får ett felmeddelande. Så ta bort den TX_Demo som du skapade som root innan du kör kommandot utan sudo.Magnus_K skrev:Ahaa ok. Nu har jag i och för sig inte testat utan sudo än, men ska försöka att alltid börja utan för att inte ställa till med något.
Använd 'sudo rm TX_Demo' för detta.
Re: Avsluta process/program i Raspbian
Jag skulle personligen inte kompilera som root bara för att det exekverbara programmet ska ägas av root.
Det är i såna fall bättre att köra "sudo chown root TX_Demo" efter kompileringen tycker jag.
Fördelen är att om kompileringen av nån anledning löper amok så vill man inte att kompilatorn körs som root med risken att den skriver över viktiga systemfiler (ok, just kompilering är kanske inte jättefarligt, men det är en bra vana att inte köra nåt som root förrän man behöver).
Det är lite lurigt att förstå hur en kompilator fungerar, är man van att kompilera en C-fil till en exekverbar fil så har man inte sett hela bilden.
Men som sodjans bild visar:
Först kompileras varje cpp-fil för sig (den körs genom pre-processor först). Det ger en massa så kallade "objektfiler", som alltså i princip innehåller kompilerade funktioner.
Sen länkas alla objektfiler, eventuellt tillsammans med externa libraries (som också är objektfiler). Länkaren tar normalt bara med de funktioner som anropas av en annan funktion (plus funktionen main(), som ju är programmets start).
Länkaren lägger alltså ett pussel kan man säga, det är det pusslet som blir ditt körbara program.
Det är i såna fall bättre att köra "sudo chown root TX_Demo" efter kompileringen tycker jag.
Fördelen är att om kompileringen av nån anledning löper amok så vill man inte att kompilatorn körs som root med risken att den skriver över viktiga systemfiler (ok, just kompilering är kanske inte jättefarligt, men det är en bra vana att inte köra nåt som root förrän man behöver).
Det är lite lurigt att förstå hur en kompilator fungerar, är man van att kompilera en C-fil till en exekverbar fil så har man inte sett hela bilden.
Men som sodjans bild visar:
Först kompileras varje cpp-fil för sig (den körs genom pre-processor först). Det ger en massa så kallade "objektfiler", som alltså i princip innehåller kompilerade funktioner.
Sen länkas alla objektfiler, eventuellt tillsammans med externa libraries (som också är objektfiler). Länkaren tar normalt bara med de funktioner som anropas av en annan funktion (plus funktionen main(), som ju är programmets start).
Länkaren lägger alltså ett pussel kan man säga, det är det pusslet som blir ditt körbara program.
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: Avsluta process/program i Raspbian
Nu när ni säger det så kan det hända jag har gjort så här i något annat projekt också.
Dock väldigt "ovant" för mig att hantera mer än en källfil, projekten brukar liksom inte bli så omfattande
Misstänker man kan ganska snarlikt jämföra det med när man inkluderar en biblioteksfil i Arduino eller i annan platform. Varje gång jag då kompilerar källfilen så hänger dom länkade filerna med?
Det kanske är det här som är skillnaden om man gör en Build mot Build all, som finns i vissa miljöer?
Ska testa att göra lite ägarbyte och annat senare. Tror jag förstår allt ni skriver, för en gång skull.
Dock väldigt "ovant" för mig att hantera mer än en källfil, projekten brukar liksom inte bli så omfattande
Misstänker man kan ganska snarlikt jämföra det med när man inkluderar en biblioteksfil i Arduino eller i annan platform. Varje gång jag då kompilerar källfilen så hänger dom länkade filerna med?
Det kanske är det här som är skillnaden om man gör en Build mot Build all, som finns i vissa miljöer?
Ska testa att göra lite ägarbyte och annat senare. Tror jag förstår allt ni skriver, för en gång skull.
Re: Avsluta process/program i Raspbian
Vid större projekt så använder man ju oftast make.
Då kompileras alla .c och .cpp etc först var och en för sig (man har ett "recept" som säger att typ att ".c ska kompileras med gcc till en .obj och .cpp ska kompilera med g++ till en -obj"). Make är "smart" på så vis att den kollar tidsstämpeln på varje källkodsfil och objektfil. Om källkodsfilen är nyare än objektfilen så kompileras källkodsfilen om, men om objektfilen är nyare så struntar den normalt i att kompilera.
Sen när alla källkodsfiler är kompilerade så körs länk-kommandot.
I en make-fil kan man ha olika "targets", t.ex. "make clean" som alltså inte kompilerar nåt utan istället rensar alla "arbetsfoldrar" så man börjar om från början.
Googlade fram en enkelt tutorial om make, notera att de första exempel är spartanska, det är när du kommer ner till Makefile 3 och 4 börjar det se ut som det "brukar".
http://www.cs.colby.edu/maxwell/courses ... maketutor/
Här finns ett exempel på en make-fil som är mer "manuellt" skriven
https://www.gnu.org/software/make/manua ... efile.html
Då kompileras alla .c och .cpp etc först var och en för sig (man har ett "recept" som säger att typ att ".c ska kompileras med gcc till en .obj och .cpp ska kompilera med g++ till en -obj"). Make är "smart" på så vis att den kollar tidsstämpeln på varje källkodsfil och objektfil. Om källkodsfilen är nyare än objektfilen så kompileras källkodsfilen om, men om objektfilen är nyare så struntar den normalt i att kompilera.
Sen när alla källkodsfiler är kompilerade så körs länk-kommandot.
I en make-fil kan man ha olika "targets", t.ex. "make clean" som alltså inte kompilerar nåt utan istället rensar alla "arbetsfoldrar" så man börjar om från början.
Googlade fram en enkelt tutorial om make, notera att de första exempel är spartanska, det är när du kommer ner till Makefile 3 och 4 börjar det se ut som det "brukar".
http://www.cs.colby.edu/maxwell/courses ... maketutor/
Här finns ett exempel på en make-fil som är mer "manuellt" skriven
https://www.gnu.org/software/make/manua ... efile.html
Re: Avsluta process/program i Raspbian
> Varje gång jag då kompilerar källfilen så hänger dom länkade filerna med?
Lite oklart vad "de länkade filerna" betyder, men om du menar "libraries"
så är det korrekta svaret "nej". Inga libraries används vid kompileringen,
de används vid länkningen.
Sen är det en annan sak att gcc/g++ automatiskt anropar länkaren åt dig,
men det är fortfarande rent tekniskt ett separat länknings steg.
Det som brukar kallas "Build" och "Build All" i en del miljöer är ofta en slags
inbyggd make funktion. "Build" kompilerar om det som behöver kompileras om.
"Build All" kompilerar om allt oavsett om det behövs eller inte.
Lite oklart vad "de länkade filerna" betyder, men om du menar "libraries"
så är det korrekta svaret "nej". Inga libraries används vid kompileringen,
de används vid länkningen.
Sen är det en annan sak att gcc/g++ automatiskt anropar länkaren åt dig,
men det är fortfarande rent tekniskt ett separat länknings steg.
Det som brukar kallas "Build" och "Build All" i en del miljöer är ofta en slags
inbyggd make funktion. "Build" kompilerar om det som behöver kompileras om.
"Build All" kompilerar om allt oavsett om det behövs eller inte.