Cuando te independizas y te vas a vivir a un piso o a una casa te preguntas, ¿cómo serán mis vecinos? Por un lado tendremos al típico que deja la basura en la puerta de su casa durante todo el día y esparce olores al resto de los vecinos; o el que desea compartir la música que escucha con los demás y el que cuando entra al edificio y ve que vas a entrar va corriendo al ascensor para no esperarte… Aunque como procesos en ejecución en un entorno Linux muchas veces queremos saber cómo son nuestros vecinos y, al contrario de lo que puede parecer en una comunidad de vecinos, éstos suelen ser mucho más receptivos y dispuestos a darnos información.… Leer artículo completo
7 Servicios online para compilar, ejecutar y ver la salida de pequeños programas
Cuando estamos aprendiendo a programar o, cuando estamos probando algún pequeño código que hemos encontrado en Stack Overflow nos viene muy bien tener a mano un lugar para compilar rápidamente y ver qué sucede. Es más, incluso se nos puede presentar el caso de que una versión específica de un compilador tiene un fallo que nos trae de cabeza y nos vendría bien probar otra versión para salir de dudas.Actualmente hay multitud de páginas que nos dan la posibilidad de compilar pequeños programas online y probar la salida de los mismos sin necesidad de tener que compilarlos nosotros (no imagináis la de pruebaX.c y pruebaX.cc que tengo en mi disco duro para cosas pequeñas de unas pocas líneas).… Leer artículo completo
Cómo conocer CPU y memoria ocupada por un grupo de procesos con el mismo nombre
En multitud de ocasiones, mientras estamos trabajando con nuestro ordenador, o incluso con un servidor remoto, se presenta la necesidad de saber la memoria ocupada o la CPU consumida por un determinado proceso.
Para ello tenemos herramientas como top o ps (entre otras) que nos permiten conocer dicha información. Podemos encontrar multitud de tutoriales para ambos comandos, sólo daré una pincelada aquí.ps
Casi siempre que uso ps suelo hacerlo de la siguiente manera:
$ ps ax
para así mostrar todos los procesos que están corriendo actualmente, y si queremos obtener información sobre memoria y CPU podremos ejecutar:
$ ps axl
o
$ ps axo pid,pcpu,pmem,size,cmd
Si queremos obtener más datos como ID de proceso (pid), % de CPU (pcpu), % de memoria (pmem), tamaño en memoria (size), comando que genera el proceso (cmd).… Leer artículo completo
BITes: Windows 3.1 en Francia, automatizando Slack, bombas fork, seguridad en Magento, jMeter
Volvemos a la carga esta semana con algunas cosas que me han llamado la atención (oye, que no tienen que ser nuevas, lo mismo me he enterado ahora y soy el último en enterarme, o es algo que merece ser recordado).Allá van:
- Francia, aún con Windows 3.1 en un aeropuerto. Desde MuyComputer, tiene tela. Es cierto que si un sistema es robusto y está muy probado, es bueno para tareas críticas.
Creando un mutex con semáforos entre procesos hijos en C [fork()]
Hemos estado viendo cómo compartir variables entre procesos hijos, y dejamos un poco en el tintero la implementación de mutex en ese caso, esta vez, para implementar el mutex vamos a utilizar semáforos. Estos semáforos también tienen que ser variables compartidas para funcionar correctamente.
Los semáforos tendrá un funcionamiento peculiar. En principio, pensemos en ellos con los valores 1 y 0. Por tanto, si el semáforo vale 1, el semáforo está abierto y lo haremos 0, pero si vale 0, nos esperaremos hasta que valga 1 (al contrario que un while (semaforo==0); utilizando semáforos, será el sistema operativo el que active nuestro proceso cuando el semáforo vale 1 por lo que podemos utilizar los recursos del sistema para otra cosa mientras).… Leer artículo completo
Variables compartidas entre procesos hijos en C [fork()]
Otra forma de enfrentarse con la concurrencia, en el maravilloso mundo de hacer varias cosas al mismo tiempo, es utilizar procesos hijos con fork(). La principal diferencia con respecto a los threads es que éstos son procesos completos, es decir, el sistema operativo les ha dado una zona de memoria de código, otra de datos, y otra de pila, a diferencia de los threads que compartían código y datos, sólo tenían la pila diferente.… Leer artículo completo
Pinceladas de concurrencia y Hello world usando pthreads
En la actualidad, es muy común ver CPUs es dual-core o quad-core (por lo menos), aunque también sigue habiendo sistemas con un sólo núcleo.Antes de nada, quiero decir que en este post sólo quiero dar algunas pinceladas, y un poco de código como introducción a este «mundo», por lo que las explicaciones serán algo rápidas, me refiero a que estaré simplificando mucho, en el fondo, todo es un poco más complicado… pero al menos daré datos suficientes para poder profundizar más en el tema.… Leer artículo completo
Creando un servidor que acepte múltiples clientes simultáneos en C
Para hacer una prueba de esto, crearemos un servidor al que nos podremos conectar por telnet y pedir cierta información a través de comandos. El ejemplo soporta los siguientes comandos (en mayúsculas):
- DATE: Pide la fecha al servidor
- TIME: Pide la hora al servidor
- HOLA: Saluda y me dice mi IP
- EXIT: Cierra el cliente actual
- CERRAR: Cierra el servidor.
- Cualquier otra cosa se manda repetida (ECHO)
… Leer artículo completo1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267/**
*************************************************************
* @file servtcp.c
* @brief Breve descripción
* Ejemplo de un cliente TCP usando threads
*
*
* @author Gaspar Fernández <blakeyed@totaki.com>
* @version 0.1Beta
* @date 13 ene 2011
* Historial de cambios:
* 20110113 - Versión inicial
*
*
*************************************************************/
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <netinet/in.h>
#include <resolv.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <pthread.h>
#include <string.h>
/** Puerto */
#define PORT 7000
/** Número máximo de hijos */
#define MAX_CHILDS 3
/** Longitud del buffer */
#define BUFFERSIZE 512
int AtiendeCliente(int socket, struct sockaddr_in addr);
int DemasiadosClientes(int socket, struct sockaddr_in addr);
void error(int code, char *err);
void reloj(int loop);
int main(int argv, char** argc){
int socket_host;
struct sockaddr_in client_addr;
struct sockaddr_in my_addr;
struct timeval tv; /* Para el timeout del accept */
socklen_t size_addr = 0;
int socket_client;
fd_set rfds; /* Conjunto de descriptores a vigilar */
int childcount=0;
int exitcode;
int childpid;
int pidstatus;
int activated=1;
int loop=0;
socket_host = socket(AF_INET, SOCK_STREAM, 0);
if(socket_host == -1)
error(1, "No puedo inicializar el socket");
my_addr.
Últimos comentarios